Wix Bootstrapper list 或提升的自定义操作

标签 wix custom-action bootstrapper

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

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

最简单的解决方案是提升整个 bootstrapper 的运行速度,但 Wix 似乎在设计上大力尝试阻止提升的 bootstrapper。该领域的所有讨论都会产生奇怪的解决方案,其中在 Wix 编译后使用外部工具嵌入应用程序 list 。

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

是否有一些干净的 Wix 内置机制来加载这些设置或使用应用程序 list 从头开始提升 Bootstrap ?我们知道,提升的 Bootstrap 对用户来说“不好”,但我们的软件针对的是服务运算符(operator),他们无论如何都必须拥有管理员权限才能操作我们的软件。

更新#1:我们已经有了一个自定义 WPF-GUI 作为 Bootstrap 应用程序,利用 Wix 提供的 Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperApplication 类。

最佳答案

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

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

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

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

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

关于Wix Bootstrapper list 或提升的自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652588/

相关文章:

wix - 安装 MSI 时什么会导致错误 2902?

wix - 如何执行带有依赖项的 WiX 自定义操作 C++ DLL 文件?

wix - 我通过 WixShellExect 运行可执行文件的 CustomAction 失败

调试自定义操作

wix - VS2012 和 Wix 3.6 - 使用我的应用程序安装 .Net 4.5

wix - 在 WiX 中指定条件先决条件

ruby-on-rails - 富文本区域被隐藏并且不显示任何内容

WiX 工具集 - 一次检查所有安装先决条件(条件安装)

mongodb - 使用 WiX 工具集安装程序安装 mongodb 并启动 mongodb 服务

database - VisualStudio 安装项目 : Deploy a Project with Database through a CustomAction BadImageFormatException