繁体   English   中英

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

[英]Start process as normal user from ClickOnce application

我们有一个 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图标(下例):

在此处输入图片说明

现在我想知道是否可以通过编程来防止这种行为并在非提升状态下启动进程,也许使用 StartInfo 属性?

如果应用程序需要UAC,则有两个原因:

  1. 有一个清单(嵌入到可执行文件或外部文件中)需要它。
  2. Windows根据某些条件决定该应用程序需要平等权限。

正如您在问题中所说的那样,相同的可执行文件在某些​​计算机上不需要UAC,而在其他计算机上则需要UAC - 很可能没有嵌入式清单,而Windows决定此应用程序需要启用。

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

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

也许这对你有帮助吗? 在Windows 7上启动C#exe而不提示UAC

将此添加到您的清单:

requestedExecutionLevel level="asInvoker" uiAccess="false"

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM