从ClickOnce应用程序以普通用户身份启动流程

时间:2016-03-09 22:35:12

标签: c# process clickonce administrator

我们有一个使用

启动外部流程的ClickOnce应用程序
p = new Process();
p.StartInfo.WorkingDirectory = Path.GetDirectoryName(exe);
p.StartInfo.FileName = Path.GetFileName(exe);
p.StartInfo.Arguments = arguments;
p.Start();

通常,人们会问是否可以将此流程作为管理启动。但就我而言,恰恰相反:

我想确保此应用程序是以登录用户身份启动的。默认情况下会发生这种情况 - 例如,当我测试它时。

但有些用户(Windows 8.1)报告exe是以管理员身份启动的。出于一些奇怪的原因,Windows自动希望以管理员身份启动它,即使根本不需要它。如果他们右键单击exe并检查Properties,则不会检查框Run this program as an administrator

检查文件夹中的exe文件时,它会显示一个UAC图标(如下所示):

enter image description here

现在我想知道在程序上是否可以阻止该行为并以非提升状态启动进程,可能使用StartInfo属性?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

如果申请需要UAC,原因有两个:

  1. 有一个清单(嵌入到可执行文件或外部文件中),需要它。
  2. Windows根据某些条件决定该应用程序需要平等权限。
  3. 正如您在问题中所说,同一个可执行文件在某些​​计算机上不需要UAC,而在其他计算机上需要UAC - 很可能没有嵌入式清单,而Windows决定此应用程序需要启用。

    Here你可以找到一些日期,但我希望仍然是UAC的相关架构。根据"安装程序检测技术"你会看到即使是简单的事情,例如"文件名包括诸如"安装,"等关键字。 "设置,"或者"更新。"可能导致Windows强制UAC在该可执行文件上。首先检查一下这是否可以帮助您解决问题(例如,可能在一些机器可执行文件中匹配其中一些标准)。

    如果这没有帮助,并且因为嵌入式清单不太可能 - 您可以尝试为该exe创建外部清单(您可以在启动进程之前自动执行此操作),其中您请求requestedExecutionLevel asInvoker。把那个清单(应该命名为.exe.manifest)放在问题exe(而不是你的clickonce应用程序)附近,看看是否有帮助。希望您知道如何创建清单文件,如果没有 - 您可以在Google上轻松找到它或在此处询问。请注意,如果可执行文件已经嵌入了清单 - 它将具有优先级(但这不太可能)。

答案 2 :(得分:0)

也许这会对你有帮助吗? launch C# exe without prompting UAC on Windows 7

将此添加到您的清单:

requestedExecutionLevel level="asInvoker" uiAccess="false"

"可能是您的第三方DLL必须以提升模式运行,因此您最好的选择是以管理员身份运行。绕过UAC提示而不以管理员身份运行是一个漫长而复杂的过程"

答案 3 :(得分:0)

您在创建新的流程实例时未指定任何帐户信息,这是正确的:这将依赖于使用运行当前流程的同一用户帐户的默认行为。

对于某些用户获得"以管理员身份运行"提示: 可能是机器上的安全规则以某种方式将可执行文件识别为不安全。尝试让客户检查是否在应用的属性页面中看到"取消阻止"按钮。如果是这样,让他们点击"取消阻止"。这将在未来消除UAC提示。