2013-11-04 101 views
1

我正在使用setup.dll以编程方式安装过滤器驱动程序。 下面是我的代码:C#编程安装过滤器驱动程序?

protected bool INFSetup(string path_to_inf, bool Install) 
    { 
     string exe = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "rundll32.exe"); 
     if (File.Exists(exe) && File.Exists(path_to_inf)) 
     { 
      try 
      { 
       Process proc = new Process(); 
       proc.EnableRaisingEvents = true; 
       string FileName = exe; 
       string Arguments = @"SETUPAPI.DLL,InstallHinfSection " + (Install ? "DefaultInstall" : "DefaultUninstall") + " 128 " + path_to_inf; 
       Debug.Writeline("Executing: '" + FileName + "' with arguments: " + Arguments); 
       ProcessStartInfo StartInfo = new ProcessStartInfo(FileName, Arguments); 
       StartInfo.CreateNoWindow = true; 
       StartInfo.UseShellExecute = false; 
       proc.StartInfo = StartInfo; 
       if (proc.Start()) 
       { 
        if (proc.WaitForExit(10000)) 
        { 
         return (proc.ExitCode == 0); 
        } 
        else 
        { 
         Debug.Writeline("INFSetup: proc.WaitForExit() returned false"); 
        } 
       } 
       else 
       { 
        Debug.Writeline("INFSetup: proc.Start() returned false"); 
       } 
      } 
      catch (Exception e) 
      { 
       Debug.Writeline("Caught Execption while installing INF: " + e.ToString()); 
       return false; 
      } 
     } 
     return false; 
    } 

虽然代码工作正常,我想知道是否有一种方法可以做到与原生Win32调用一样吗? 这将是伟大的,如果任何人有一个示例C#代码? 由于 亨利

回答

0

作为rundll命令行提示InstallHinfSection也从SETUPAPI.DLL出口并且因此P /可调用。 MSFT bod发布了一个p/invoke签名here

+0

谢谢,我会在我的更新后的代码发布后 – ehenry7

相关问题