检查文件是否存在于应用程序中的用户定义"Install Location" C++
Check if file exists in user-defined "Install Location" in C++ application
我有一个使用 WIX 工具包构建的项目,该项目部署了一些组件作为简单安装程序包 (MSI) 的一部分:
- 图书馆,
libtest.dll
- 库的头文件,
libtest.h
- 一个简单的应用程序来练习库,
libtest_example.exe
我在libtest.dll
中有一个功能,它没有直接向用户公开,它检查PWD
(当前工作目录)中名为override.raw
的文件。如果此文件存在,则libtest_example.exe
使用的libtest.dll
中的正常初始化代码的行为将有所不同(即:如果应用程序从控制台启动,则启用调试日志记录到控制台)。
我想将一个功能集成到libtest.dll
中,以便如果它在PWD
中找不到override.raw
,它会检查 MSI 软件包的安装位置。这是我为 x86 和 x64 编译的包,因此默认位置为:
- 32 位版本
- x86
- C:\程序文件\42鸡\libtest
- x64
- C:\程序文件 (x86)\42Chickens\libtest
- x86
- 64 位版本
- x86
- 不会安装
- x64
- C:\程序文件\42鸡\libtest
- x86
当然,用户可以更改默认安装位置。
因此,我要做的是在我的C++库中确定libtest.dll
,我的软件安装到的位置,并检查该位置是否有override.raw
,如果它在 PWD 中不存在。
有没有一种微不足道的方法可以做到这一点?更好的是,有没有办法将我的WIX项目中的一些文件直接包含在我的C++源中,这样我只需要在一个位置更改值?我最好的猜测是我正在从WIX项目中查询某种GUID/UUID值,并使用Windows系统调用或Windows SDK命令根据密钥查询注册表项,但这就是我所得到的。
我还写了一个混乱的例子,其中WIX添加了额外的注册表项,但它们似乎在系统与系统之间并不相同,因此我正在寻求适用于Windows XP,Vista,7,8.x和10的便携式解决方案的帮助。
谢谢!
您可以使用 MsiGetComponentPath MSI API 函数获取组件(通常是文件)的密钥路径。您也可以将用户选择的安装目录写入注册表,并从初始化代码中查询该目录。这可能更容易,并且不需要协调产品代码和组件 GUID。
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- Visual C++(VS2017)中用户定义的转换不明确
- 使用用户定义的参数调用future/async并调用类方法
- 带有用户定义类的c++折叠表达式
- g++用户定义的动态链接库上的全局new和delete运算符
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 修改"std::set"中用户定义类型的值
- 参数包构造函数在类模板中隐藏用户定义的转换
- MAKE:找不到包含的用户定义的头文件?
- C++:用户定义的显式类型转换函数错误
- 是否有解决方法可以在 c++ 中为 short 定义用户定义的文字?
- 从 QAbstractItemModel 返回自定义用户类型
- 无法引用自定义用户控件
- Lua:为自定义用户数据提供一个字符串方法
- 是否可以在visualstudio调试窗口中定义用户定义的变量
- 如何在编写自定义用户操作时引用内置操作
- C++自定义用户输入调用变量
- 不能定义用户定义的字面值