Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 运行命令行(cmd),该命令行要求;安全信息“;_C#_Windows_Cmd_Driver - Fatal编程技术网

C# 运行命令行(cmd),该命令行要求;安全信息“;

C# 运行命令行(cmd),该命令行要求;安全信息“;,c#,windows,cmd,driver,C#,Windows,Cmd,Driver,我想在c#程序中运行命令行pnputil。该程序需要安装USB驱动程序。 我知道如何在c#程序中运行cmd,但我有一个不同的问题: 我要安装的驱动程序没有windows的权限。 如果我通过“设备管理器->更新驱动程序”安装驱动程序并选择驱动程序的路径,我会从windows收到“安全消息”,即“windows无法验证此驱动程序软件的发布者”,并让我选择是否安装驱动程序(当然,如果我选择安装-安装成功) 如果我从cmdpnputil-a运行命令,我也会收到这个消息,我可以安装驱动程序 但是当我试图通

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

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

如果我通过“设备管理器->更新驱动程序”安装驱动程序并选择驱动程序的路径,我会从windows收到“安全消息”,即“windows无法验证此驱动程序软件的发布者”,并让我选择是否安装驱动程序(当然,如果我选择安装-安装成功)

如果我从cmd
pnputil-a
运行命令,我也会收到这个消息,我可以安装驱动程序

但是当我试图通过c程序运行命令时——程序运行,但驱动程序没有安装(我也没有收到此消息)

我的c#代码:

System.Diagnostics.Process进程=新的System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo=新系统.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle=System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName=“cmd.exe”;
startInfo.Arguments=@“/C Pnputil-a”;
process.StartInfo=StartInfo;
process.Start();
我该怎么做?

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

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

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

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

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

bcdedit -set TESTSIGNING ON

有关测试签名的更多信息,请参阅。进行测试签名可能会将水印作为测试放在桌面waterpaper中

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

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

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

但是,如果我试图从C#内部调用pnputil,我永远无法获得安全警告,并且驱动程序包也没有添加到驱动程序存储中。我尝试过使用各种选项(例如Verb=“runas”、UseShellExecute=true等),文件名设置为“pnputil”或“cmd”

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

%windir%\sysnative\pnputil /a <path_to_inf>
%windir%\sysnative\pnputil/a
然后,我的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();
processproc=newprocess();
proc.StartInfo.FileName=“”;
proc.StartInfo.Verb=“runas”;
proc.StartInfo.UseShellExecute=true;
proc.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow=true;
proc.Start();
首先会提示用户,因为我要求以提升的权限运行,然后是预期的安全警告。然后,驱动程序包将按预期添加到驱动程序存储中


如果这不符合预期,您可以在批处理文件中最后一个命令后的新行上添加“暂停”(不带引号),并从C代码中删除WindowsStyle和CreateNoWindow行,以查看命令提示符上发生的情况。

您的软件正在为您提供安全信息?我在哪里可以买到这件奇妙的东西?:)@user1994587如果您共享该安全消息,它将加快查找解决方案的速度。psst。这是
还是
不是
消息
不是
按摩
<代码>按摩
是对皮肤/身体施加压力,这就是为什么戴维格在评论中开玩笑的原因。另外。
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();