我有非常奇怪的情况需要处理。
我们有一个基于WIX的MSI安装程序。现在我们想引导这个MSI,所以我打算使用WIX Burn。直到现在一切正常。但是当我尝试从旧版本的MSI升级到最新的WIX Bundle时,我遇到了一个问题。
WIX包很好地检测升级但我想读取旧版MSI创建的注册表项。较旧的MSI创建的注册表项仅具有Administrator的权限。读取注册表项是非常重要的,因为我的UI取决于我升级表单的版本。我知道在Engine.Detect回调期间,我将了解以前安装的版本。但我需要找到一些配置文件位置,我只能通过阅读注册表来完成。此外,即使我可以获取配置文件位置,在中等完整性下运行的捆绑包也可能没有读取文件的权限。那么有没有办法可以提升Bundle.exe的执行力
答案 0 :(得分:0)
这是迟到的回答。我找到了一个能帮我完成工作的黑客。
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost"> <Payload SourceFile="$(var.exe_loc)\RegistryACLUpdater.exe"/> </BootstrapperApplicationRef>
string RegistryAclUpdater = "RegistryACLUpdater.exe";
string path = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), RegistryAclUpdater);
var processStartInfo = new ProcessStartInfo()
{
FileName = path,
CreateNoWindow = true,
UseShellExecute = true,
RedirectStandardError = false,
Arguments = arguments,
Verb = "runas" //To execute in elevated mode.
};
var registryPermissionUpdater = new Process()
{
StartInfo = processStartInfo
};