有没有办法引用在wix代码上声明的文件,例如:
<DirectoryRef Id="MAIN_INSTALLLOCATION">
<Component Id="CMP_config_system" Guid="a430710e-a95b-48d7-acbe-3bf4e6b2c8fc">
<File Id="FILE_config_system" KeyPath="yes" Source="config_system.ini"/>
</Component>
</DirectoryRef>
例如,在用C ++编码的自定义动作中(参见问号)
UINT __stdcall entryPoint(MSIHANDLE hInstall)
{
//...
LPWSTR filePath = NULL;
hr = WcaGetProperty(???, &filePath);
//...
}
所以这样可以根据不同的东西打开和编辑该文件吗?
编辑与@ NC1相同的方法,但使用WiX API
// ...
const std::wstring APPDATA_DIR = L"AppDataDir";
const std::wstring CONFIG_SYSTEM = L"config_system.ini";
LPWSTR path = NULL;
hr = WcaGetProperty(APPDATA_DIR.c_str(), &path);
ExitOnFailure(hr, "Failed to get Path");
config_system_path = std::wstring(path) + CONFIG_SYSTEM;
//...
答案 0 :(得分:1)
这就是我这样做的方式。我的自定义操作是在安装文件之后安排的,所以我得到了安装它的目录并附加了我想编辑的文件(对我来说是文本文件),不确定这是否是唯一的方法,但它对我有用。 / p>
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
char szLocation[MAX_PATH];
LPWSTR szInstallLocation = NULL;
CString lpszString;
hr = WcaInitialize(hInstall, "NAMEOFCUSTOMACTION");
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized.");
hr = WcaGetProperty(L"MAIN_INSTALLLOCATION",&szInstallLocation);
ExitOnFailure(hr, "failed to get install location");
wcstombs(szLocation, szInstallLocation, 260);
strcat(szLocation, "\config_system.ini");
其中szLocation
将具有完整路径。希望这有帮助