运行命令行(cmd),需要"安全消息"

时间:2014-10-23 09:29:00

标签: c# windows cmd driver

我想在c#程序中运行命令行pnputil。该程序需要安装USB驱动程序。 我知道如何在c#程序中运行cmd,但我有一个不同的问题:

我要安装的驱动程序没有Windows权限。

如果我通过"设备管理器安装驱动程序 - >更新驱动程序"并选择驱动程序的路径,我得到"安全消息"来自Windows的窗户无法验证此驱动软件的发布者"让我选择是否安装驱动程序(当然,如果我选择安装 - 安装成功)。

如果我从cmd pnputil -a <path_name_inf>运行命令,我也收到此消息,我可以安装驱动程序。

但是当我尝试通过c#程序运行命令时 - 程序运行但未安装驱动程序(我也没有收到此消息)。

我在c#中的代码:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = @"/C Pnputil -a <path_name_inf>";
process.StartInfo = startInfo;
process.Start();

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以尝试使用runas动词运行 cmd

startInfo.Verb = "runas";
startInfo.UseShellExecute = true;

此参数会导致权限提升。在资源管理器中使用“以管理员身份运行”时,可以达到同样的效果。

答案 1 :(得分:0)

您的问题更多的是安装未签名的驱动程序。

您可以尝试以下步骤: 以管理员身份打开命令提示符并键入:

bcdedit -set TESTSIGNING ON

有关测试签名的更多信息,请参阅MSDN link。进行测试签名可以在桌面水印中添加水印作为TEST

答案 2 :(得分:0)

我知道这是旧的,但我想分享我的解决方案,以防它可以帮助别人。

我的具体情况是我想在Windows 7 Home Premium 64位上向驱动程序存储区添加未签名的驱动程序包。

与OP一样,如果我使用命令提示符#34执行pnputil -a <path_to_inf>,则按预期工作(意味着我收到了安全警告并且驱动程序包已添加到驱动程序存储区);以管理员身份运行&# 34。

Windows can't verify the publisher of this driver software

但是,如果我尝试从C#中调用pnputil,我就无法获得安全警告,并且驱动程序包未添加到驱动程序存储区。我曾尝试使用各种选项(即Verb =&#34; runas&#34;,UseShellExecute = true等),FileName设置为&#34; pnputil&#34;或&#34; cmd&#34;。

最终,对我有用的是创建一个包含以下内容的简单批处理文件:

%windir%\sysnative\pnputil /a <path_to_inf>

我的C#应用​​程序将按如下方式调用此批处理文件:

Process proc = new Process();
proc.StartInfo.FileName = "<path_to_bat_file>";
proc.StartInfo.Verb = "runas";
proc.StartInfo.UseShellExecute = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();

首先会提示用户,因为我要求以提升的权限运行,然后是预期的安全警告。然后,驱动程序包将按预期添加到驱动程序存储区。

User Account Control

如果这不能按预期工作,您可以添加&#34;暂停&#34; (在没有引号的情况下)在批处理文件中的最后一个命令之后的新行上,并从C#代码中删除WindowStyle和CreateNoWindow行,以查看命令提示符上发生的情况。