我尝试过三种不同的方式调用UpdateDriverForPlugAndPlayDevices。他们在这里:
[DllImport("newdev.dll", CharSet = CharSet.Ansi, SetLastError = true)]
public static extern bool UpdateDriverForPlugAndPlayDevices(
IntPtr hwndParent,
[MarshalAs(UnmanagedType.LPWStr)] string HardwareId,
[MarshalAs(UnmanagedType.LPWStr)] string FullInfPath,
uint InstallFlags,
ref bool bRebootRequired);
[DllImport("newdev.dll", SetLastError = true, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UpdateDriverForPlugAndPlayDevices(
[In, Optional] IntPtr hwndParent,
[In] string HardwareId,
[In] string FullInfPath,
[In] uint InstallFlags,
[Out, Optional] bool bRebootRequired
);
[DllImport("newdev.dll", SetLastError = true)]
public static extern bool UpdateDriverForPlugAndPlayDevices(
IntPtr hwndParent,
string HardwareId,
string FullInfPath,
uint InstallFlags,
ref bool bRebootRequired
);
无论我调用哪一个,返回的结果都是false,以下对Marshall.GetLastWin32Error()
的调用给出错误代码-536870347。我已搜索并搜索过,但未找到任何此类错误代码。
我觉得问题在于我定义函数的方式,因为我可以将无意义的参数传递给我对UpdateDriverForPlugAndPlayDevices()
的调用,但我仍然得到相同的错误代码。
之前的通话导致这项工作正常,我使用针对SetupDiGetClassDevsW()
,SetupDiEnumDeviceInfo()
,SetupDiGetDeviceRegistryProperty()
和SetupCopyOEMInf()
的电话调用,他们都在预期的方式。
有人可以告诉我这个错误意味着什么,或者我做错了什么?谢谢!
答案 0 :(得分:3)
给出错误代码-536870347
始终将这么大的数字转换为十六进制。你会得到0xE0000235。谷歌非常好,它是ERROR_IN_WOW64
。或者换句话说,您无法在64位版本的Windows上从32位程序进行SetupDi调用。
右键单击EXE项目,“属性”,“构建”选项卡。删除抖动强制,使其以AnyCPU运行。如果你看到它,请取消“首选32位”选项。重复发布配置。
答案 1 :(得分:0)
[DllImport("NewDev.dll", CharSet = CharSet.Auto, EntryPoint = "UpdateDriverForPlugAndPlayDevices")]
[SecurityCritical]
[return: MarshalAs(UnmanagedType.Bool)]
internal extern static bool UpdateDriverForPlugAndPlayDevices(IntPtr hwndParent,
[MarshalAs(UnmanagedType.LPWStr)]String szHardwordID,
[MarshalAs(UnmanagedType.LPWStr)]String szINFName,
uint installFlags, IntPtr bRebootRequired);