msi: automation: Clear all VT_BSTR variants returned by DispGetParam.
This commit is contained in:
parent
ab2669a750
commit
3a424aca58
|
@ -560,7 +560,9 @@ static HRESULT WINAPI RecordImpl_Invoke(
|
|||
if (FAILED(hr)) return hr;
|
||||
hr = DispGetParam(pDispParams, DISPID_PROPERTYPUT, VT_BSTR, &varg1, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
if ((ret = MsiRecordSetStringW(This->msiHandle, V_I4(&varg0), V_BSTR(&varg1))) != ERROR_SUCCESS)
|
||||
ret = MsiRecordSetStringW(This->msiHandle, V_I4(&varg0), V_BSTR(&varg1));
|
||||
VariantClear(&varg1);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("MsiRecordSetString returned %d\n", ret);
|
||||
return DISP_E_EXCEPTION;
|
||||
|
@ -726,7 +728,9 @@ static HRESULT WINAPI DatabaseImpl_Invoke(
|
|||
hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
V_VT(pVarResult) = VT_DISPATCH;
|
||||
if ((ret = MsiDatabaseOpenViewW(This->msiHandle, V_BSTR(&varg0), &msiHandle)) == ERROR_SUCCESS)
|
||||
ret = MsiDatabaseOpenViewW(This->msiHandle, V_BSTR(&varg0), &msiHandle);
|
||||
VariantClear(&varg0);
|
||||
if (ret == ERROR_SUCCESS)
|
||||
{
|
||||
if (SUCCEEDED(create_automation_object(msiHandle, NULL, (LPVOID*)&pDispatch, &DIID_View, ViewImpl_Invoke, NULL, 0)))
|
||||
{
|
||||
|
@ -803,6 +807,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
|
|||
}
|
||||
if (ret != ERROR_SUCCESS)
|
||||
ERR("MsiGetProperty returned %d\n", ret);
|
||||
VariantClear(&varg0);
|
||||
} else if (wFlags & DISPATCH_PROPERTYPUT) {
|
||||
hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
|
@ -811,7 +816,10 @@ static HRESULT WINAPI SessionImpl_Invoke(
|
|||
VariantClear(&varg0);
|
||||
return hr;
|
||||
}
|
||||
if ((ret = MsiSetPropertyW(This->msiHandle, V_BSTR(&varg0), V_BSTR(&varg1))) != ERROR_SUCCESS)
|
||||
ret = MsiSetPropertyW(This->msiHandle, V_BSTR(&varg0), V_BSTR(&varg1));
|
||||
VariantClear(&varg0);
|
||||
VariantClear(&varg1);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("MsiSetProperty returned %d\n", ret);
|
||||
return DISP_E_EXCEPTION;
|
||||
|
@ -870,6 +878,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
|
|||
hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
ret = MsiDoActionW(This->msiHandle, V_BSTR(&varg0));
|
||||
VariantClear(&varg0);
|
||||
V_VT(pVarResult) = VT_I4;
|
||||
switch (ret)
|
||||
{
|
||||
|
@ -926,6 +935,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
|
|||
ERR("MsiGetFeatureState returned %d\n", ret);
|
||||
V_I4(pVarResult) = msiInstallStateUnknown;
|
||||
}
|
||||
VariantClear(&varg0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -941,6 +951,7 @@ static HRESULT WINAPI SessionImpl_Invoke(
|
|||
ERR("MsiGetFeatureState returned %d\n", ret);
|
||||
V_I4(pVarResult) = msiInstallStateUnknown;
|
||||
}
|
||||
VariantClear(&varg0);
|
||||
} else if (wFlags & DISPATCH_PROPERTYPUT) {
|
||||
hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
|
@ -949,7 +960,9 @@ static HRESULT WINAPI SessionImpl_Invoke(
|
|||
VariantClear(&varg0);
|
||||
return hr;
|
||||
}
|
||||
if ((ret = MsiSetFeatureStateW(This->msiHandle, V_BSTR(&varg0), V_I4(&varg1))) != ERROR_SUCCESS)
|
||||
ret = MsiSetFeatureStateW(This->msiHandle, V_BSTR(&varg0), V_I4(&varg1));
|
||||
VariantClear(&varg0);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
{
|
||||
ERR("MsiSetFeatureState returned %d\n", ret);
|
||||
return DISP_E_EXCEPTION;
|
||||
|
@ -992,9 +1005,15 @@ static HRESULT WINAPI InstallerImpl_Invoke(
|
|||
hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
hr = DispGetParam(pDispParams, 1, VT_I4, &varg1, puArgErr);
|
||||
if (FAILED(hr)) return hr;
|
||||
if (FAILED(hr))
|
||||
{
|
||||
VariantClear(&varg0);
|
||||
return hr;
|
||||
}
|
||||
V_VT(pVarResult) = VT_DISPATCH;
|
||||
if ((ret = MsiOpenPackageExW(V_BSTR(&varg0), V_I4(&varg1), &msiHandle)) == ERROR_SUCCESS)
|
||||
ret = MsiOpenPackageExW(V_BSTR(&varg0), V_I4(&varg1), &msiHandle);
|
||||
VariantClear(&varg0);
|
||||
if (ret == ERROR_SUCCESS)
|
||||
{
|
||||
if (SUCCEEDED(create_session(msiHandle, (IDispatch *)This, &pDispatch)))
|
||||
{
|
||||
|
@ -1016,6 +1035,7 @@ static HRESULT WINAPI InstallerImpl_Invoke(
|
|||
if (FAILED(hr)) return hr;
|
||||
V_VT(pVarResult) = VT_I4;
|
||||
V_I4(pVarResult) = MsiQueryProductStateW(V_BSTR(&varg0));
|
||||
VariantClear(&varg0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue