我正在使用c#.net製作應用程序。它還包含一個文件系統微過濾器驅動程序。我想用c#.net編程安裝和卸載此驅動程序。通常我可以使用.INF文件安裝(通過右鍵點擊+按安裝)。但我想以編程方式安裝。有一個SDK函數InstallHinfSection()用於安裝.inf驅動程序。我正在尋找這個功能的.net等價物。使用C#編程安裝/卸載.inf驅動程序.net
問候
Navaneeth
我正在使用c#.net製作應用程序。它還包含一個文件系統微過濾器驅動程序。我想用c#.net編程安裝和卸載此驅動程序。通常我可以使用.INF文件安裝(通過右鍵點擊+按安裝)。但我想以編程方式安裝。有一個SDK函數InstallHinfSection()用於安裝.inf驅動程序。我正在尋找這個功能的.net等價物。使用C#編程安裝/卸載.inf驅動程序.net
問候
Navaneeth
嘗試是這樣的:
using System.Runtime.InteropServices;
[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, "my path", 0);
我使用P/Invoke Signature Generator產生最該簽名。
該方法的全部細節及其參數在MSDN。根據MSDN,第一個參數可以爲空,第二個爲必須爲爲空,並且最後一個參數必須爲爲0.您只需傳入字符串參數。
這個簡單的代碼爲我工作
private void driverInstall()
{
var process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = "/c C:\\Windows\\System32\\InfDefaultInstall.exe " + driverPath; // where driverPath is path of .inf file
process.Start();
process.WaitForExit();
process.Dispose();
MessageBox.Show(@"Driver has been installed");
}
我一直在尋找一個.NET相當於本機API。 – Navaneeth 2010-01-09 06:07:52
沒有一個。你必須P /調用它。 – Eilon 2010-01-09 06:09:12
我應該澄清一下:.NET Framework不包含此API的託管代碼版本。 .NET Framework幾乎不包含用於封裝低級別Win32 API的API,例如驅動程序安裝API。通過聲明一個P/Invoke方法,您可以直接從託管代碼調用本機Win32 API。 – Eilon 2010-01-09 06:20:20