1

我想获取产品的安装日期:

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

我已经检查过:

  1. 所有变量都是好的类型,buffer size( DWORD max)不为null等于我的buffer的大小
  2. 我使用一个函数将std::string(我有我的 GUID std::string)转换为std::wstring在调试器下,一切看起来都不错,转换在使用 WinAPI 和的代码的许多其他地方都有效std::wstring)。
  3. 我尝试过使用不同的 GUID,它们都存在并且可以“手动”询问注册。总是MsiGetProductInfo()返回那个错误。
  4. 我也尝试在代码( )中编写 GUID,L"{GUID-GO-EXACTLY-HERE}"结果相同。

我只是不知道问题出在哪里?

4

0 回答 0