2010-01-09 13 views
13

का उपयोग कर प्रोग्रामिंग रूप से एक .inf ड्राइवर को स्थापित/अनइंस्टॉल करें। मैं C# .net का उपयोग कर एक एप्लिकेशन बना रहा हूं। इसमें एक फाइल सिस्टम मिनीफिल्टर ड्राइवर भी शामिल है। मैं इस ड्राइवर को प्रोग्रामिंग रूप से C# .net का उपयोग करके स्थापित और अनइंस्टॉल करना चाहता हूं। आम तौर पर मैं इसे .INF फ़ाइल का उपयोग करके इंस्टॉल कर सकता हूं (राइट क्लिक + प्रेस इंस्टॉल करें)। लेकिन मैं इसे प्रोग्रामेटिक रूप से इंस्टॉल करना चाहता हूं। .inf ड्राइवर स्थापित करने के लिए एक SDK फ़ंक्शन InstallHinfSection() है। मैं इस समारोह के लिए एक .net समकक्ष की तलाश में हूं।सी # .net

सादर

Navaneeth

उत्तर

23

कुछ इस तरह का प्रयास करें:

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

तो यह कॉल करने के लिए:

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

मैं P/Invoke Signature Generator का उपयोग कर इस हस्ताक्षर के सबसे उत्पन्न।

इस विधि और उसके पैरामीटर का पूरा विवरण MSDN पर है। एमएसडीएन के अनुसार पहला पैरामीटर शून्य हो सकता है, दूसरा शून्य होना चाहिए, और अंतिम पैरामीटर होना चाहिए 0. आपको केवल स्ट्रिंग पैरामीटर में पास करना होगा।

+0

मैं इस देशी एपीआई के लिए एक .net समकक्ष के लिए देख रहा था। – Navaneeth

+0

कोई नहीं है। आपको पी/इसे आमंत्रित करना होगा। – Eilon

+4

मुझे स्पष्टीकरण देना चाहिए: .NET Framework में इस API का प्रबंधित कोड संस्करण शामिल नहीं है। .NET Framework में बहुत कम एपीआई हैं जो कम-स्तर वाले Win32 API जैसे ड्राइवर स्थापना API को लपेटती हैं। पी/Invoke विधि घोषित करके आप सीधे प्रबंधित कोड से देशी Win32 API को कॉल कर रहे हैं। – Eilon

4

यह सरल कोड मेरे लिए काम किया

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