Wix Bootstrapper清单或提升的自定义操作

时间:2016-06-06 08:18:26

标签: wix custom-action bootstrapper

我知道这是一个经过多次讨论的主题,人们总是声称:Wix bootstrappers不应该要求提升。让我解释一下我们的要求,并希望任何人都可以建议一个适用于所有系统的解决方案。

我们安装的软件是Windows服务,它运行得很高。该服务具有各种设置,这些设置存储在只能由管理员访问的数据库中。安装程序还允许配置这些设置,这些设置是作为安装程序升级阶段的一部分完成的。这就是问题所在:我们无法在引导程序的未加载阶段加载数据库中的当前设置。

最简单的解决方案是运行整个boostrapper升级,但似乎Wix集中尝试通过设计防止升高的bootstraper。此领域的所有讨论都会产生一些奇怪的解决方案,之后使用外部工具在Wix编译之后嵌入应用程序清单。

是的,理论上我们可以修改整个数据库凭据,以便允许安装程序读取访问权限,但我想由于安全原因而阻止这种情况。我们还可以在可读的位置(例如注册表)保留安装程序的设置副本,但这也不好维护。

是否有一些干净的Wix内置机制来加载这些设置或使用应用程序清单从头开始提升引导程序?我们知道提升的引导程序对用户来说“不好”,但是我们的软件解决了服务操作员无论如何必须具有管理员权限才能操作我们的软件。

更新#1:我们已经使用Wix提供的Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperApplication类将自定义WPF-GUI作为引导程序应用程序。

1 个答案:

答案 0 :(得分:0)

如果没有必要提升UI本身,您可以强制安装引擎升级,以便在升级模式下安装或执行所有引导程序包。

要提升引擎,请使用Engine的Elevate方法(Elevate获取'IntPtr hwndParent'参数 - 我使用了窗口的IntPtr并且效果很好。)

(调用Elevate方法将显示\弹出UAC提升屏幕)

请记住,Elevate方法不是阻塞操作,我记得它总是返回true。确定高程是否实际成功的唯一方法(我发现)是注册到bootstrapper的Error事件并检查错误类型是否为ErrorType.Elevate。

请注意,在此解决方案中, UI 本身将保持不升级。

相关问题