Do a very basic first implementation of MsiConfigureProductExW for

msiexec /@  when run as a reboot.
Also add a number of new stubs for the office xp and 2k3 install and
startup process.
oldstable
Aric Stewart 2005-01-19 16:58:03 +00:00 committed by Alexandre Julliard
parent b2d79634ba
commit 2c0e46d9df
2 changed files with 146 additions and 8 deletions

View File

@ -588,7 +588,105 @@ UINT WINAPI MsiApplyPatchW(LPCWSTR szPatchPackage, LPCWSTR szInstallPackage, INS
return ERROR_CALL_NOT_IMPLEMENTED;
}
UINT WINAPI MsiConfigureProductA(LPCSTR szProduct, int iInstallLevel, INSTALLSTATE eInstallState)
UINT WINAPI MsiConfigureProductExW(LPCWSTR szProduct, int iInstallLevel,
INSTALLSTATE eInstallState, LPCWSTR szCommandLine)
{
MSIHANDLE handle;
MSIPACKAGE* package;
UINT rc;
WCHAR squished_pc[0x100];
HKEY hkey=0,hkey2=0,hkey3=0,hkey4=0;
static const WCHAR szInstaller[] = {
'S','o','f','t','w','a','r','e','\\',
'M','i','c','r','o','s','o','f','t','\\',
'I','n','s','t','a','l','l','e','r',0 };
static const WCHAR szProducts[] = {
'P','r','o','d','u','c','t','s',0 };
DWORD sz;
static const WCHAR szSouceList[] = {
'S','o','u','r','c','e','L','i','s','t',0};
static const WCHAR szLUS[] = {
'L','a','s','t','U','s','e','d','S','o','u','r','c','e',0};
WCHAR sourcepath[0x200];
static const WCHAR szInstalled[] = {
' ','I','n','s','t','a','l','l','e','d','=','1',0};
LPWSTR commandline;
FIXME("%s %d %d %s\n",debugstr_w(szProduct), iInstallLevel, eInstallState,
debugstr_w(szCommandLine));
if (eInstallState != INSTALLSTATE_LOCAL)
{
FIXME("Not implemented for anything other than local installs\n");
return ERROR_CALL_NOT_IMPLEMENTED;
}
squash_guid(szProduct,squished_pc);
TRACE("squished (%s)\n", debugstr_w(squished_pc));
rc = RegOpenKeyW(HKEY_CURRENT_USER,szInstaller,&hkey);
if (rc != ERROR_SUCCESS)
goto end;
/* check the products key for the product */
rc = RegOpenKeyW(hkey,szProducts,&hkey2);
if (rc != ERROR_SUCCESS)
goto end;
rc = RegOpenKeyW(hkey2,squished_pc,&hkey3);
if (rc != ERROR_SUCCESS)
goto end;
rc = RegOpenKeyW(hkey3,szSouceList,&hkey4);
if (rc != ERROR_SUCCESS)
goto end;
sz = sizeof(sourcepath);
rc = RegQueryValueExW(hkey4, szLUS, NULL, NULL,(LPBYTE)sourcepath, &sz);
if (rc != ERROR_SUCCESS)
goto end;
/*
* ok 1, we need to find the msi file for this product.
* 2, find the source dir for the files
* 3, do the configure/install.
4, cleanupany runonce entry.
*/
rc = MsiOpenProductW(szProduct,&handle);
if (rc != ERROR_SUCCESS)
goto end;
package = msihandle2msiinfo(handle, MSIHANDLETYPE_PACKAGE);
sz = strlenW(szInstalled);
if (szCommandLine)
sz += strlenW(szCommandLine);
commandline = HeapAlloc(GetProcessHeap(),0,sz * sizeof(WCHAR));
if (szCommandLine)
strcpyW(commandline,szCommandLine);
else
commandline[0] = 0;
if (MsiQueryProductStateW(szProduct) == iInstallLevel)
strcatW(commandline,szInstalled);
rc = ACTION_DoTopLevelINSTALL(package, sourcepath, commandline);
HeapFree(GetProcessHeap(),0,commandline);
end:
RegCloseKey(hkey3);
RegCloseKey(hkey2);
RegCloseKey(hkey);
return rc;
}
UINT WINAPI MsiConfigureProductA(LPCSTR szProduct, int iInstallLevel,
INSTALLSTATE eInstallState)
{
LPWSTR szwProduct = NULL;
UINT hr = ERROR_SUCCESS;
@ -613,10 +711,13 @@ end:
return hr;
}
UINT WINAPI MsiConfigureProductW(LPCWSTR szProduct, int iInstallLevel, INSTALLSTATE eInstallState)
UINT WINAPI MsiConfigureProductW(LPCWSTR szProduct, int iInstallLevel,
INSTALLSTATE eInstallState)
{
FIXME("%s %d %d\n",debugstr_w(szProduct), iInstallLevel, eInstallState);
return ERROR_CALL_NOT_IMPLEMENTED;
return MsiConfigureProductExW(szProduct, iInstallLevel, eInstallState,
NULL);
}
UINT WINAPI MsiGetProductCodeA(LPCSTR szComponent, LPSTR szBuffer)
@ -1783,3 +1884,40 @@ UINT WINAPI MsiGetFeatureUsageA(LPCSTR szProduct, LPCSTR szFeature,
pdwUseCount, pwDateUsed);
return ERROR_CALL_NOT_IMPLEMENTED;
}
UINT WINAPI MsiUseFeatureExW(LPCWSTR szProduct, LPCWSTR szFeature,
DWORD dwInstallMode, DWORD dwReserved)
{
FIXME("%s %s %li %li\n", debugstr_w(szProduct), debugstr_w(szFeature),
dwInstallMode, dwReserved);
return INSTALLSTATE_LOCAL;
}
UINT WINAPI MsiProvideQualifiedComponentExW(LPCWSTR szComponent,
LPCWSTR szQualifier, DWORD dwInstallMode, LPWSTR szProduct,
DWORD Unused1, DWORD Unused2 , LPWSTR lpPathBuf,
DWORD* pcchPathBuf)
{
FIXME("%s %s %li %s %li %li %p %p\n", debugstr_w(szComponent),
debugstr_w(szQualifier), dwInstallMode, debugstr_w(szProduct), Unused1, Unused2,
lpPathBuf, pcchPathBuf);
return ERROR_INDEX_ABSENT;
}
UINT WINAPI MsiGetUserInfoW(LPCWSTR szProduct, LPWSTR lpUserNameBuf,
DWORD* pcchUserNameBuf, LPWSTR lpOrgNameBuf,
DWORD* pcchOrgNameBuf, LPWSTR lpSerialBuf, DWORD* pcchSerialBuf)
{
FIXME("%s, %p %p %p %p %p %p\n",debugstr_w(szProduct), lpUserNameBuf,
pcchUserNameBuf, lpOrgNameBuf, pcchOrgNameBuf, lpSerialBuf, pcchSerialBuf);
return USERINFOSTATE_UNKNOWN;
}
UINT WINAPI MsiCollectUserInfoW(LPWSTR szProduct)
{
FIXME("%s\n",debugstr_w(szProduct));
return ERROR_FUNCTION_FAILED;
}

View File

@ -7,7 +7,7 @@
7 stdcall MsiCloseAllHandles()
8 stdcall MsiCloseHandle(long)
9 stub MsiCollectUserInfoA
10 stub MsiCollectUserInfoW
10 stdcall MsiCollectUserInfoW(wstr)
11 stub MsiConfigureFeatureA
12 stub MsiConfigureFeatureFromDescriptorA
13 stub MsiConfigureFeatureFromDescriptorW
@ -79,7 +79,7 @@
79 stdcall MsiGetTargetPathA(long str ptr ptr)
80 stdcall MsiGetTargetPathW(long wstr ptr ptr)
81 stub MsiGetUserInfoA
82 stub MsiGetUserInfoW
82 stdcall MsiGetUserInfoW(wstr ptr ptr ptr ptr ptr ptr)
83 stub MsiInstallMissingComponentA
84 stub MsiInstallMissingComponentW
85 stub MsiInstallMissingFileA
@ -187,10 +187,10 @@
187 stub MsiQueryFeatureStateFromDescriptorA
188 stub MsiQueryFeatureStateFromDescriptorW
189 stub MsiConfigureProductExA
190 stub MsiConfigureProductExW
190 stdcall MsiConfigureProductExW (wstr long long wstr)
191 stub MsiInvalidateFeatureCache
192 stub MsiUseFeatureExA
193 stub MsiUseFeatureExW
193 stdcall MsiUseFeatureExW(wstr wstr long long)
194 stdcall MsiGetFileVersionA(str str ptr str ptr)
195 stdcall MsiGetFileVersionW(wstr wstr ptr wstr ptr)
196 stdcall MsiLoadStringA(long long long long long)
@ -200,7 +200,7 @@
200 stub MsiDecomposeDescriptorA
201 stub MsiDecomposeDescriptorW
202 stub MsiProvideQualifiedComponentExA
203 stub MsiProvideQualifiedComponentExW
203 stdcall MsiProvideQualifiedComponentExW(wstr wstr long wstr long long ptr ptr)
204 stdcall MsiEnumRelatedProductsA(str long long ptr)
205 stdcall MsiEnumRelatedProductsW(wstr long long ptr)
206 stub MsiSetFeatureAttributesA