我創建了C++自定義動作DLL。我有一個從DLL中調用的msi,但該DLL不包含在MSI中,它與它位於相同的位置。C++自定義動作DLL的路徑
我使用以下方法來獲得MSI的位置:
TCHAR* szValueBuf = NULL;
DWORD cchValueBuf = 0;
UINT uiStat = MsiGetProperty(hInstall, TEXT("OriginalDatabase"), TEXT(""), &cchValueBuf);
if (ERROR_MORE_DATA == uiStat)
{
++cchValueBuf;
szValueBuf = new TCHAR[cchValueBuf];
if (szValueBuf)
{
uiStat = MsiGetProperty(hInstall, TEXT("OriginalDatabase"), szValueBuf, &cchValueBuf);
}
}
if (ERROR_SUCCESS != uiStat)
{
if (szValueBuf != NULL)
delete[] szValueBuf;
return ERROR_INSTALL_FAILURE;
}
這個偉大的工程,並得到我的完整路徑,但該路徑有MSI的名字在最後,我需要刪除這要放入我的DLL的名稱還是有另一種方式?
我曾嘗試:
std::string s = "NPath";
int pos = s.find_last_of("\\");
s.erase(0, pos + 1);
s.erase(s.length() - 4, 4);
s.append("product.ini");
但我發現了這個錯誤:
error C2894: templates cannot be declared to have 'C' linkage
感謝
嗨,我已經編輯我的問題上面,你能幫助更多的嗎? –