【问题标题】:run command line (cmd) that require "Security Message"运行需要“安全消息”的命令行 (cmd)
【发布时间】:2014-10-23 09:29:00
【问题描述】:

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

我要安装的驱动没有windows权限。

如果我通过“设备管理器->更新驱动程序”安装驱动程序并选择驱动程序的路径,我会从 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();

我该怎么做?

【问题讨论】:

  • 您的软件正在为您提供安全按摩?我在哪里可以得到这个神奇的东西? :)

标签: c# windows cmd driver


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

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

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

bcdedit -set TESTSIGNING ON

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-05
      • 2014-11-17
      • 2022-08-20
      • 2012-05-03
      • 2018-03-14
      • 2021-03-13
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多