我想获取产品的安装日期:
DWORD max = 255;
WCHAR buffer[255];
std::wstring guidWString = S::WstrToStr(subKeys[i]); //from array of std::string
LPCWSTR guid = guidWString.c_str();
int err = MsiGetProductInfo(guid, INSTALLPROPERTY_INSTALLDATE, buffer, &max);
if(err == ERROR_SUCCESS){ //never success :(
info.date = S::WstrToStr(std::wstring(buffer));
}
但我总是得到错误代码 87 (*ERROR_INVALID_PARAMETER*)。根据文档,我在这里看不到任何“无效”的东西:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa370130%28v=vs.85%29.aspx
我已经检查过:
- 所有变量都是好的类型,buffer size(
DWORD max
)不为null,等于我的buffer的大小。 - 我使用一个函数将
std::string
(我有我的 GUIDstd::string
)转换为std::wstring
(在调试器下,一切看起来都不错,转换在使用 WinAPI 和的代码的许多其他地方都有效std::wstring
)。 - 我尝试过使用不同的 GUID,它们都存在并且可以“手动”询问注册。总是
MsiGetProductInfo()
返回那个错误。 - 我也尝试在代码( )中编写 GUID,
L"{GUID-GO-EXACTLY-HERE}"
结果相同。
我只是不知道问题出在哪里?