C++ 检查“用户定义”中是否存在文件;“安装位置”;在C++;应用

C++ 检查“用户定义”中是否存在文件;“安装位置”;在C++;应用,c++,visual-studio,visual-c++,wix,wix3.8,C++,Visual Studio,Visual C++,Wix,Wix3.8,我有一个使用WIX Toolkit构建的项目,它部署了一些组件作为简单安装程序包(MSI)的一部分: 一个库,libtest.dll 库的头文件,libtest.h 一个练习库的简单应用程序,libtest\u example.exe 我在libtest.dll中有一个功能,它不会直接向用户公开,它在PWD(当前工作目录)中检查名为override.raw的文件。如果此文件存在,则libtest\u example.exe使用的libtest.dll中的正常初始化代码的行为将不同(即:如果从

我有一个使用WIX Toolkit构建的项目,它部署了一些组件作为简单安装程序包(MSI)的一部分:

  • 一个库,
    libtest.dll
  • 库的头文件,
    libtest.h
  • 一个练习库的简单应用程序,
    libtest\u example.exe
我在
libtest.dll
中有一个功能,它不会直接向用户公开,它在
PWD
(当前工作目录)中检查名为
override.raw的文件。如果此文件存在,则
libtest\u example.exe
使用的
libtest.dll
中的正常初始化代码的行为将不同(即:如果从控制台启动应用程序,则启用控制台调试日志记录)

我想将一个功能集成到
libtest.dll
中,这样,如果在
PWD
中找不到
override.raw
,它就会检查MSI包的安装位置。这是我为x86和x64编译的包,因此默认位置为:

  • 32位版本
    • x86
      • C:\Program Files\421\libtest
    • x64
      • C:\ProgramFiles(x86)\421\libtest
  • 64位版本
    • x86
      • 不会安装
    • x64
      • C:\Program Files\421\libtest
当然,用户可以更改默认安装位置

这样,我想做的是,在我的C++库中,确定<代码> LbTest.DLL<代码>,在那里安装了我的软件,检查该位置是否为“代码>重写”。 有没有一个简单的方法可以做到这一点?更好的是,有没有办法将一些文件从我的WIX项目直接包含到我的C++源中,所以我只需要在一个位置改变值?我最好的猜测是,我正在从WIX项目中查询某种GUID/UUID值,并使用Windows系统调用或Windows SDK命令根据注册表项的大小来查询注册表项,但这只是我所了解的

我还写了一个混乱的例子,WIX添加了额外的注册表项,但它们在不同的系统之间似乎并不完全相同,因此我正在寻求一个适用于Windows XP、Vista、7、8.x和10的便携式解决方案的帮助

谢谢

可以使用MSI API函数获取组件(通常是文件)的密钥路径。您还可以将用户选择的安装目录写入注册表,并从初始化代码中查询该目录。这可能更容易,并且不需要协调产品代码和组件guid