2010-01-09 233 views
13

我正在使用c#.net製作應用程序。它還包含一個文件系統微過濾器驅動程序。我想用c#.net編程安裝和卸載此驅動程序。通常我可以使用.INF文件安裝(通過右鍵點擊+按安裝)。但我想以編程方式安裝。有一個SDK函數InstallHinfSection()用於安裝.inf驅動程序。我正在尋找這個功能的.net等價物。使用C#編程安裝/卸載.inf驅動程序.net

問候

Navaneeth

回答

23

嘗試是這樣的:

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.您只需傳入字符串參數。

+0

我一直在尋找一個.NET相當於本機API。 – Navaneeth 2010-01-09 06:07:52

+0

沒有一個。你必須P /調用它。 – Eilon 2010-01-09 06:09:12

+4

我應該澄清一下:.NET Framework不包含此API的託管代碼版本。 .NET Framework幾乎不包含用於封裝低級別Win32 API的API,例如驅動程序安裝API。通過聲明一個P/Invoke方法,您可以直接從託管代碼調用本機Win32 API。 – Eilon 2010-01-09 06:20:20

4

這個簡單的代碼爲我工作

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"); 
    }