1

我使用 wixsharp 编写了一个 WIX 安装程序,它包装了使用批处理文件的旧式安装过程。当以非管理员身份运行 MSI 时,我会收到提升(UAC 对话框)的提示,但是批处理脚本是以非管理员身份运行的

var project = new Project(string.Format("App");
project.Actions = new[] { new PathFileAction(@"C:\build\build_script.bat", args[1], @"C:\build\", Return.check, When.After, Step.InstallExecute, Condition.NOT_Installed, Sequence.InstallExecuteSequence) };
project.UI = WUI.WixUI_InstallDir;

解决此问题的一种方法是以管理员身份启动命令提示符并使用 msiexec 运行 MSI - 这可行但非常笨拙。

如何PathFileAction以管理员身份运行?

4

2 回答 2

1

我使用了这个基于纯 WIX 的答案Execute='deferred' Impersonate='no'- 你需要添加到输出 xml 所以在 wixsharp 中这可以通过Attributes......

var publishAction = new PathFileAction(@"C:\build\build_script.bat"...
publishAction.Attributes = new Dictionary<string, string>() 
{ 
    {"Execute", "deferred"}, 
    {"Impersonate", "no"} 
};

更新:这将运行脚本NT AUTHORITY\SYSTEM- 如果您想以自己的身份运行它(具有提升的权限),这似乎是不可能的

于 2015-02-18T02:21:49.403 回答
0

我看不到 build_script.bat 的内容,但我认为它正在静默安装 MSI。在这种情况下,UAC 提示是不可能的,因此安装程序会以 no priv 失败退出。您必须运行提升的 .bat 文件,或者您必须首先通过广告 (msiexec /jm) 来“祝福”MSI,以便它从非提升的用户进程自行提升到位。

于 2015-02-17T23:09:11.950 回答