2010-01-09 23 views
13

Ben C# .net kullanarak bir uygulama yapıyorum. Ayrıca bir dosya sistemi minifilter sürücüsü içerir. Bu sürücüyü program aracılığıyla C# .net kullanarak kurmak ve kaldırmak istiyorum. Normalde .INF dosyasını kullanarak bunu yükleyebilirim (sağ tıkla + yüklemeyi yükle) .Bunu program aracılığıyla yüklemek istiyorum. .inf sürücüsünü yüklemek için bir SDK işlevi InstallHinfSection() var. Bu işlev için bir .net eşdeğer arıyorum.C# .net kullanarak programlı bir .inf sürücüsünü yükleyin/kaldırın.

Selamlar

Navaneeth

cevap

23

böyle bir şey deneyin:

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

Sonra adlandırmak:

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

Ben P/Invoke Signature Generator kullanarak bu imzanın en üretti.

Bu yöntemin tüm ayrıntıları ve parametreleri MSDN adresindedir. MSDN'ye göre, ilk parametre boş olabilir, ikincisi olmalıdır ve son parametre olmalıdır. Sadece dize parametresini geçmek zorundasınız.

+0

benim için çalıştı. – Navaneeth

+0

Bir tane yok. P/onu çağırmalısınız. – Eilon

+4

Açıklığa kavuşturmalıyım: .NET Framework, bu API'nın yönetilen kod sürümünü içermez. .NET Framework'ün, sürücü yükleme API'leri gibi düşük düzeyli Win32 API'lerini sarması için çok az API vardır. Bir P/Invoke yöntemini bildirerek, doğrudan yönetilen koddan yerel Win32 API'sini çağırıyorsunuz demektir. – Eilon

4

Bu basit kod bu yerli API için bir .net eşdeğer arıyordu

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