2014-02-26 5 views
0

나는이 작업 쿼리를 가지고 난 그냥 하나의 슬래시에 대한 배 슬래시를 사용하는 데 필요한 것을 깨달았다WMI 이스케이프 문자는 프로그래밍 방식

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'", 
"USB\\\\VID_046D&PID_C52B&MI_00\\\\6&48E0D58&0&0000")).First(); 

: WMI에서 탈출, C#에서 두 탈출이.

내 문제는 직접 프로그래밍 대신 프로그래밍 방식으로 수행하는 방법입니다. 일반적으로이뿐만 아니라 작동 그래서 나는 물론, 탈출 문자열의 앞에 @을 사용합니다 :

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'", 
@"USB\\VID_046D&PID_C52B&MI_00\\6&48E0D58&0&0000")).First(); 

을하지만 난 문자열 변수로 어떻게 그렇게합니까?

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
"select * from Win32_PnPEntity where DeviceID='{0}'", 
device["DeviceID"].ToString())).First(); 

이것은 필요한 이스케이프가 없으며 잘못된 쿼리로 실패합니다. 그것을 쓰는 것은 @device["DeviceID"].ToString() 작동하지 않습니다.

어떤 아이디어가 있습니까?

답변

0

나는 바보 같아서 쉽게 문자열 대신 바꾸기 만하면된다.

ManagementObject pnpdevice = new ManagementObjectSearcher(String.Format(
    "select * from Win32_PnPEntity where DeviceID='{0}'", 
    @device["DeviceID"].ToString().Replace("\\", "\\\\"))).First(); 
+0

단지 이런 식으로 작동하지 않습니다. 'ManagementObjectSearcher'는 컬렉션이 아니며'IEnumberable'을 상속받지 않으므로'First()'를 호출 할 수 없습니다. –