【发布时间】:2019-05-08 14:23:14
【问题描述】:
我有一个带有安装程序项目安装程序的 Visual Studio 2017 c# 应用程序。我们使用“自定义操作”来启动在 MSI 完成时运行的可执行文件,并且自定义操作位于自定义操作选项卡中的“提交”下。
应用程序运行时,其 Windows 用户主体为 NT AUTHORITY\SYSTEM。
当我自己运行应用程序时,它的用户就是我,MYDOMAIN\MYUSER
所以我试图让它提升这些权限,到目前为止,我主要在谷歌上搜索旧的 stackoverflow 问题,但我发现了三个可能的解决方案,但没有一个对我有用,在所有情况下,exe 仍在 NT AUTHORITY\ 下运行系统
- 添加包含 的应用清单
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
- 在记事本中编辑 vdproj 文件,使 RequiresElevation “true”
"MsiBootstrapper"
{
"LangId" = "3:1033"
"RequiresElevation" = "11:TRUE"
}
- 尝试添加 AdminUser 作为启动条件,按照:How do I avoid UAC when my EXE file name contains the word "update"?
以上方法已经单独尝试过,但它始终是 SYSTEM 用户。
关于如何让自定义操作作为登录用户的权限而不是作为 SYSTEM 运行的任何想法?谢谢
【问题讨论】:
-
应用程序在做什么?如果它不需要管理员权限,您可以将它所做的事情移至主
application.exe及其启动顺序。更易于实施、调试和维护。对 QA 人员也更好(他们可以清理注册表并重新启动您的应用程序并快速再次运行)。 -
MSI 正在安装服务,作为自定义操作运行的应用程序会提示用户提供必要的信息以登录服务并将其连接到与之通信的网站。所以该应用没有 UI,因此我们必须在安装时与用户交互。
-
不太清楚为什么需要提升当前用户。为什么 SYSTEM 还不够?
-
在某些域(而不是其他域)上,安装程序自定义操作会失败,因为它没有足够的权限,而当用户在安装完成后启动相同的自定义操作 exe 时它会起作用。还有一个易用性问题,我们可以为服务凭证默认用户名和域名。但是是的,主要问题是在 MSI 安装程序的上下文中存在某种权限问题。抱歉,我不知道确切的问题,但无论是什么解决方案都是提升权限。
-
在已编译的 MSI 中,查看
CustomAction table(使用 Orca or similar tools 打开)。尝试根据您在上述链接中找到的选项调整Type值。我现在没有适合你的样品。
标签: c# visual-studio-2017 windows-installer custom-action