2010-01-09 16 views
13

Estoy haciendo una aplicación usando C# .net. Contiene un controlador de minifiltro del sistema de archivos también. Quiero instalar y desinstalar este controlador mediante programación usando C# .net. Normalmente puedo instalar esto usando el archivo .INF (haciendo clic derecho + presionar instalar). Pero quiero instalar esto programáticamente. Hay una función SDK InstallHinfSection() para instalar el controlador .inf. Estoy buscando un equivalente .net para esta función.instalar/desinstalar un controlador .inf programáticamente usando C# .net

Saludos

Navaneeth

Respuesta

23

intentar algo como esto:

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

Entonces llamarlo:

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

que genera la mayor parte de esta firma con el P/Invoke Signature Generator.

Los detalles completos de este método y sus parámetros están en MSDN. Según MSDN, el primer parámetro puede ser nulo, el segundo debe ser ser nulo, y el último parámetro debe ser ser 0. Solo debe pasar el parámetro de cadena.

+0

que estaba buscando un equivalente de .NET para esta API nativa. – Navaneeth

+0

No hay uno. Tienes que P/invocarlo. – Eilon

+4

Debo aclarar: .NET Framework no incluye una versión de código administrado de esta API. .NET Framework tiene muy pocas API que envuelven API de Win32 de bajo nivel, como las API de instalación de controladores. Al declarar un método P/Invocar, está llamando directamente a la API Win32 nativa desde el código administrado. – Eilon

4

Este código simple que funcionó para mí

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