我有代码来检索产品的主要版本。声明属性为PRODVER_MAJOR = 2
代码如下:
function myfunction(hMSI)
string svmajorversion;
number nsize;
begin
nsize = 256;
MsiGetProperty (ISMSI_HANDLE, "PRODVER_MAJOR", svmajorversion, nsize);
MessageBox ("MajorVersion:" +svmajorversion, INFORMATION);
end
答案 0 :(得分:0)
行为取决于行动的安排。如果从延迟的自定义操作中调用它,则它无法直接访问大多数属性,而是必须通过属性CustomActionData
检索数据,而属性ISMSI_HANDLE
必须在调用操作之前设置。
在任何一种情况下,我都建议使用hMSI
替换使用{{1}}(在事件期间主要有用的通用全局句柄)(该句柄专门传递给此自定义操作)。
答案 1 :(得分:0)
实际检查MsiGetProperty function的返回值可能会有所帮助。
返回值ERROR_INVALID_HANDLE 无效或无效的句柄是 提供。
ERROR_INVALID_PARAMETER
无效参数传递给 功能ERROR_MORE_DATA
提供的缓冲区太小,无法容纳整个缓冲区 值。ERROR_SUCCESS
功能成功了。