2010-01-09 33 views
13

Tôi đang tạo một ứng dụng bằng cách sử dụng C# .net. Nó cũng chứa trình điều khiển minifilter hệ thống tập tin. Tôi muốn cài đặt và gỡ bỏ cài đặt trình điều khiển này lập trình bằng cách sử dụng C# .net. Thông thường tôi có thể cài đặt bằng cách sử dụng tệp .INF (bằng cách nhấp chuột phải + nhấn cài đặt). Nhưng tôi muốn cài đặt chương trình này. Có một hàm InstallHinfSection() để cài đặt trình điều khiển .inf. Tôi đang tìm kiếm một .net tương đương cho chức năng này.cài đặt/gỡ cài đặt trình điều khiển .inf lập trình bằng C# .net

Trân

Navaneeth

Trả lời

23

Hãy thử một cái gì đó như thế này:

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

Sau đó, để gọi nó là:

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

tôi tạo ra hầu hết chữ ký này bằng cách sử dụng P/Invoke Signature Generator.

Chi tiết đầy đủ của phương pháp này và thông số của phương thức này nằm trên MSDN. Theo MSDN tham số đầu tiên có thể là null, tham số thứ nhất phải là là rỗng và tham số cuối phải là là 0. Bạn chỉ phải chuyển tham số chuỗi.

+0

tôi đang tìm kiếm một tương đương .net cho API bản địa này. – Navaneeth

+0

Không có. Bạn phải P/Gọi nó. – Eilon

+4

Tôi nên làm rõ: .NET Framework không bao gồm phiên bản mã được quản lý của API này. .NET Framework có rất ít các API bao bọc các API Win32 mức thấp như các API cài đặt trình điều khiển. Bằng cách khai báo một phương thức P/Invoke, bạn đang gọi trực tiếp API Win32 riêng từ mã được quản lý. – Eilon

4

mã đơn giản này đã làm việc cho tôi

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"); 
    } 
Các vấn đề liên quan