2010-01-09 12 views
13

Tworzę aplikację przy użyciu C# .net. Zawiera również sterownik minifiltru systemu plików. Chcę zainstalować i odinstalować ten sterownik programowo za pomocą C# .net. Zwykle mogę zainstalować to za pomocą pliku .INF (klikając prawym przyciskiem myszy + naciśnij install), ale chcę zainstalować to programowo. Istnieje funkcja SDK funkcji InstallHinfSection() do instalowania sterownika .inf. Szukam odpowiednika .net dla tej funkcji.zainstalować/odinstalować sterownik .inf programowo za pomocą C# .net

Pozdrowienia

Navaneeth

Odpowiedz

23

Spróbuj czegoś takiego:

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

Wtedy to nazwać:

InstallHinfSection(IntPtr.Zero, IntPtr.Zero, "my path", 0); 

I generowane przez większość tego podpisu pomocą P/Invoke Signature Generator.

Pełne informacje dotyczące tej metody i jej parametrów znajdują się na stronie MSDN. Według MSDN pierwszy parametr może mieć wartość zerową, drugi musi być ma wartość null, a ostatni parametr musi być 0. Musimy tylko przekazać parametr ciąg.

+0

szukałem ekwiwalentu NET tym natywnego API. – Navaneeth

+0

Nie ma. Musisz P/Invoke it. – Eilon

+4

Powinienem wyjaśnić: .NET Framework nie zawiera zarządzanej wersji kodu tego API. System .NET Framework ma bardzo niewiele interfejsów API, które otaczają API Win32 niskiego poziomu, takie jak interfejsy API do instalowania sterowników. Deklarując metodę P/Invoke, bezpośrednio wywołujesz macierzysty interfejs Win32 API z kodu zarządzanego. – Eilon

4

Ten prosty kod pracował dla mnie

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"); 
    } 
Powiązane problemy