我正在尝试在程序安装过程中以编程方式安装驱动器。我尝试了几件事,但似乎都没有安装我的驱动程序。
我尝试过的基于Google / Stack搜索的内容:
方法1:
设置属性:[DllImport("DIFxAPI.dll", CharSet = CharSet.Auto, SetLastError = true)]
result = DriverPackagePreinstall(tempPath + "umpusbXP.inf", Flags);
if (result != 0)
MessageBox.Show("Driver 'umpusbXP.inf' installation failed.");
其中Flags
已设置为
//0x00000010
Int32 DRIVER_PACKAGE_LEGACY_MODE = 16;
//0x00000004
Int32 DRIVER_PACKAGE_FORCE = 4;
//0x00000008
Int32 DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT = 8;
似乎不起作用。它将返回各种错误,其中一些我能够在互联网上找到意义,其他错误。最常见的是0xE0000304 ERROR_INVALID_CATALOG_DATA => no cat
(我发现at)其他错误的数字不在该文件中或我能找到的任何其他地方。
方法2:
设置属性:
[DllImport("Setupapi.dll", EntryPoint = "InstallHinfSection", CallingConvention = CallingConvention.StdCall)]
public static extern void InstallHinfSection(
[In] IntPtr hwnd,
[In] IntPtr ModuleHandle,
[In, MarshalAs(UnmanagedType.LPWStr)] string CmdLineBuffer,
int nCmdShow);
然后使用方法
InstallHinfSection(IntPtr.Zero, IntPtr.Zero, tempPath + "umpusbXP.inf", 0);
此方法返回void,因此很难从中获取任何信息。不用说它没有安装驱动程序。
方法3:
设置属性:
[DllImport("setupapi.dll")]
public static extern bool SetupCopyOEMInf(
string SourceInfFileName,
string OEMSourceMediaLocation,
OemSourceMediaType OEMSourceMediaType,
OemCopyStyle CopyStyle,
string DestinationInfFileName,
int DestinationInfFileNameSize,
ref int RequiredSize,
string DestinationInfFileNameComponent
);
然后使用此方法
string output ="";
int size = 0;
SetupCopyOEMInf(tempPath + "umpusbXP.inf", null, OemSourceMediaType.SPOST_PATH, OemCopyStyle.SP_COPY_OEMINF_CATALOG_ONLY, null, 0, ref size, output);
我尽量使用这些方法,但文档阅读起来很棘手。我一直在检查我的setupapi.log
文件是否有错误,但没有显示。一个人应该如何安装驱动程序?