【问题标题】:Start process as normal user from ClickOnce application从 ClickOnce 应用程序以普通用户身份启动进程
【发布时间】:2016-06-24 13:31:49
【问题描述】:

我们有一个 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 属性?

【问题讨论】:

  • 是“wusa”您点击一次的应用程序还是您生成的应用程序/进程。子进程应该以与启动它的应用程序相同的级别开始。
  • 不,它只是一张随机图片,显示可执行图标的外观,当 Windows(出于某种奇怪的原因)让用户以管理员身份启动程序时。
  • 你控制你从clickonce开始的那个外部exe吗?
  • 嗨@Evk,这不是我的exe,它是一个外部程序。该程序的路径可以在我的 clickonce 可执行文件中配置,当用户单击我的应用程序中的按钮时,我的应用程序会启动它(通过使用给定的路径)。

标签: c# process clickonce administrator


【解决方案1】:

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

将此添加到您的清单中:

requestedExecutionLevel level="asInvoker" uiAccess="false"

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

【讨论】:

  • 以管理员身份运行 clickonce 应用程序并不容易,因为它不是那样的。有一些解决方法,但我更喜欢覆盖其他应用程序的“start as”选项,因为没有理由需要管理员权限。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 2019-08-27
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多