2010-01-09 4 views
13

Ich mache eine Anwendung mit C# .net. Es enthält auch einen Dateisystem-Minifiltertreiber. Ich möchte diesen Treiber programmgesteuert mit C# .net installieren und deinstallieren. Normalerweise kann ich dies mit der INF-Datei installieren (durch Rechtsklick + Installation drücken). Aber ich möchte dies programmatisch installieren. Es gibt eine SDK-Funktion InstallHinfSection() zum Installieren des INF-Treibers. Ich suche nach einem .net Äquivalent für diese Funktion.installieren/deinstallieren Sie einen .inf-Treiber programmgesteuert mit C# .net

Grüße

Navaneeth

Antwort

23

so etwas wie dieses Versuchen:

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

Dann es zu nennen:

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

ich die meisten dieser Signatur erzeugt die P/Invoke Signature Generator verwenden.

Die vollständigen Details dieser Methode und ihrer Parameter sind auf MSDN. Laut MSDN kann der erste Parameter null sein, der zweite muss null sein, und der letzte Parameter muss 0 sein. Sie müssen nur den Zeichenfolgenparameter übergeben.

+0

Ich war für diese native API für eine .net Äquivalent suchen. – Navaneeth

+0

Es gibt keins. Sie müssen P/Invoke es. – Eilon

+4

Ich sollte klarstellen: Das .NET Framework enthält keine verwaltete Codeversion dieser API. Das .NET Framework verfügt über sehr wenige APIs, die Win32-APIs niedriger Ebene wie Treiberinstallations-APIs umschließen. Indem Sie eine P/Invoke-Methode deklarieren, rufen Sie die native Win32-API direkt aus verwaltetem Code auf. – Eilon

4

Dieser einfache Code für mich gearbeitet

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