运行wix批处理脚本作为提升/管理员

时间:2015-02-17 03:20:57

标签: c# wix wixsharp

我使用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

2 个答案:

答案 0 :(得分:1)

我使用基于纯WIX的this answer - 你需要将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运行 - 如果您想自己运行(使用提升的权限),则会显示is not possible

答案 1 :(得分:0)

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