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

Dan*_*u15 5 custom-action wix bootstrapper

我知道这是一个已经讨论过很多次的话题,人们总是声称:Wix 引导程序不应该需要提升运行。让我解释一下我们的要求,希望任何人都可以提出一个适用于所有系统的解决方案。

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

最简单的解决方案是运行整个 boostrapper 提升,但似乎 Wix 集中试图通过设计防止提升的引导程序。这方面的所有讨论都导致了奇怪的解决方案,其中在 Wix 编译后使用外部工具嵌入应用程序清单。

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

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

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

Tea*_*ney 2

如果不需要提升 UI 本身,您可以强制安装引擎提升,以便所有引导程序包都将以提升模式安装/执行。

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

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

请记住,Elevate 方法不是阻塞操作,而且我记得它总是返回 true。(我发现)确定提升是否真正成功的唯一方法是注册引导程序的 Error 事件并检查错误类型是否为 ErrorType.Elevate。

请记住,在此解决方案中,UI本身将保持不提升状态。