![使用服务从本地硬盘启动未签名的程序时提示安全警告](https://linux22.com/image/1315862/%E4%BD%BF%E7%94%A8%E6%9C%8D%E5%8A%A1%E4%BB%8E%E6%9C%AC%E5%9C%B0%E7%A1%AC%E7%9B%98%E5%90%AF%E5%8A%A8%E6%9C%AA%E7%AD%BE%E5%90%8D%E7%9A%84%E7%A8%8B%E5%BA%8F%E6%97%B6%E6%8F%90%E7%A4%BA%E5%AE%89%E5%85%A8%E8%AD%A6%E5%91%8A.png)
我有一个远程 Windows Embedded 盒(基本上是 WinXPSP3 的有限功能副本),上面有一个 Windows 服务,它的唯一目的是确保特定应用程序的副本正在运行。如果没有,它会在代码中使用 .NET Process.Start() 调用来启动副本。
我们在近 1300 个与此非常相似的机器上运行了此服务和程序,没有任何问题。但是,对于这个特定的机器,当服务(以“本地系统”运行)尝试启动软件时,会弹出安全警告提示,软件无法启动。然后,服务重复该命令(因为软件没有启动),最终结果是出现 100 个安全警告对话框,并且没有运行任何软件。显然这是一个问题,因为我们无法照看这个机器(或任何其他机器),并且该软件对我们的业务运营至关重要,这涉及健康和生命安全。
当以默认登录用户身份启动软件时,软件启动正常。软件驻留在相关机器的硬盘上,而不是任何网络共享中,因此区域应该是“我的电脑”。该文件被“阻止”,但后来被“解除阻止”,没有任何变化。
假设无法对服务或软件进行任何更改,但我可以对 Windows 环境本身进行任何操作,例如更改运行服务的用户帐户、修改 Internet 选项、组策略等。还假设 .exe 文件在 GP 中被列为“安全”低风险文件,启动应用程序时不会提示 Intranet 安全设置,并且没有受信任的站点/域。基本上,我已经尝试了 Google 搜索中提到的所有方法,以禁用所有应用程序的安全警告,但问题仍然存在。
答案1
将应用程序签名的证书添加到电脑“受信任的发布者”列表。您需要通过 GP 或通过 mmc 手动打开它来执行此操作。您可能已将证书添加到用户的证书存储,这就是为什么当您以系统身份运行时它不受信任的原因。将其添加到计算机存储后,看看它是否正常工作。
答案2
Dim infoStart As New System.Diagnostics.ProcessStartInfo
Dim strFile As String = "SomeFileName.exe"
infoStart.FileName = strFile
infoStart.UseShellExecute = False '<---- this is what you want
Process.Start(infoStart)