我有一个使用WIX Toolkit构建的项目,它将一些组件部署为一个简单的安装程序包(MSI)的一部分:
libtest.dll
libtest.h
libtest_example.exe
我在libtest.dll
中有一个功能,它不会直接暴露给用户,在那里它检查PWD
(当前工作目录)中是否有一个名为override.raw
的文件。如果此文件存在,libtest.dll
使用的libtest_example.exe
中的正常初始化代码将表现不同(即:如果从控制台启动应用程序,则启用调试日志记录到控制台)。
我想将一个功能集成到libtest.dll
中,这样如果它无法在override.raw
中找到PWD
,它会检查MSI包的安装位置。这是我为x86和x64编译的包,因此默认位置为:
当然,用户可以更改默认安装位置。
所以,我尝试做的是在我的C ++库中确定安装了我的软件的libtest.dll
,并检查override.raw
的位置,如果它没有&#39 ; t存在于PWD中。
有这么简单的方法吗?更好的是,有没有办法将我的WIX项目中的一些文件直接包含到我的C ++源代码中,所以我只需要在一个位置更改值?我最好的猜测是我从WIX项目中查询某种GUID / UUID值,并使用Windows系统调用或Windows SDK命令根据密钥查询注册表项,但这是就在我得到的时候。
我还写了一个混乱的例子,其中WIX添加了额外的注册表项,但它们在系统到系统之间似乎并不相同,所以我在寻求便携式解决方案的帮助适用于Windows XP,Vista,7,8.x和10。
谢谢!
答案 0 :(得分:2)
您可以使用MsiGetComponentPath MSI API函数来获取组件的密钥路径(通常是文件)。您也可以将用户选择的安装目录写入注册表,并从初始化代码中查询该目录。这可能更容易,并且不需要协调产品代码和组件GUID。