MSI: RegisterProduct work
Aric Stewart
aric at codeweavers.com
Fri Jun 17 09:01:11 CDT 2005
flesh out the remaining keys in RegisterProduct
-------------- next part --------------
Index: dlls/msi/action.c
===================================================================
RCS file: /home/wine/wine/dlls/msi/action.c,v
retrieving revision 1.148
diff -u -r1.148 action.c
--- dlls/msi/action.c 16 Jun 2005 20:40:34 -0000 1.148
+++ dlls/msi/action.c 17 Jun 2005 13:59:08 -0000
@@ -4333,7 +3680,7 @@
static UINT ACTION_RegisterProduct(MSIPACKAGE *package)
{
HKEY hkey=0;
- LPWSTR buffer;
+ LPWSTR buffer = NULL;
LPWSTR productcode;
UINT rc,i;
DWORD size;
@@ -4389,6 +3736,31 @@
{'L','o','c','a','l','P','a','c','k','a','g','e',0};
static const WCHAR szUpgradeCode[] =
{'U','p','g','r','a','d','e','C','o','d','e',0};
+ static const WCHAR modpath_fmt[] =
+ {'M','s','i','E','x','e','c','.','e','x','e',' ','/','I','[','P','r','o','d','u','c','t','C','o','d','e',']',0};
+ static const WCHAR szModifyPath[] =
+ {'M','o','d','i','f','y','P','a','t','h',0};
+ static const WCHAR szUninstallString[] =
+ {'U','n','i','n','s','t','a','l','l','S','t','r','i','n','g',0};
+ static const WCHAR szEstimatedSize[] =
+ {'E','s','t','i','m','a','t','e','d','S','i','z','e',0};
+ static const WCHAR szInstallDate[] =
+ {'I','n','s','t','a','l','l','D','a','t','e',0};
+ static const WCHAR szLanguage[] =
+ {'L','a','n','g','u','a','g','e',0};
+ static const WCHAR szProductLanguage[] =
+ {'P','r','o','d','u','c','t','L','a','n','g','u','a','g','e',0};
+ static const WCHAR szProductVersion[] =
+ {'P','r','o','d','u','c','t','V','e','r','s','i','o','n',0};
+ static const WCHAR szVersion[] =
+ {'V','e','r','s','i','o','n',0};
+ static const WCHAR szVersionMajor[] =
+ {'V','e','r','s','i','o','n','M','a','j','o','r',0};
+ static const WCHAR szVersionMinor[] =
+ {'V','e','r','s','i','o','n','M','i','n','o','r',0};
+
+ SYSTEMTIME systime;
+ static const WCHAR date_fmt[] = {'%','i','%','i','%','i',0};
LPWSTR upgrade_code;
WCHAR windir[MAX_PATH], path[MAX_PATH], packagefile[MAX_PATH];
INT num,start;
@@ -4415,6 +3787,7 @@
buffer = szNONE;
size = strlenW(buffer)*sizeof(WCHAR);
RegSetValueExW(hkey,szRegKeys[i],0,REG_SZ,(LPSTR)buffer,size);
+ HeapFree(GetProcessHeap(),0,buffer);
i++;
}
@@ -4456,6 +3829,42 @@
size = strlenW(packagefile)*sizeof(WCHAR);
RegSetValueExW(hkey,szLocalPackage,0,REG_SZ,(LPSTR)packagefile,size);
+ /* do ModifyPath and UninstallString */
+ size = deformat_string(package,modpath_fmt,&buffer);
+ RegSetValueExW(hkey,szModifyPath,0,REG_EXPAND_SZ,(LPSTR)buffer,size);
+ RegSetValueExW(hkey,szUninstallString,0,REG_EXPAND_SZ,(LPSTR)buffer,size);
+ HeapFree(GetProcessHeap(),0,buffer);
+
+ FIXME("Write real Estimated Size when we have it\n");
+ size = 0;
+ RegSetValueExW(hkey,szEstimatedSize,0,REG_DWORD,(LPSTR)&size,sizeof(DWORD));
+
+ GetLocalTime(&systime);
+ size = 9*sizeof(WCHAR);
+ buffer= HeapAlloc(GetProcessHeap(),0,size);
+ sprintfW(buffer,date_fmt,systime.wYear,systime.wMonth,systime.wDay);
+ size = strlenW(buffer)*sizeof(WCHAR);
+ RegSetValueExW(hkey,szInstallDate,0,REG_SZ,(LPSTR)buffer,size);
+ HeapFree(GetProcessHeap(),0,buffer);
+
+ buffer = load_dynamic_property(package,szProductLanguage,NULL);
+ size = atoiW(buffer);
+ RegSetValueExW(hkey,szLanguage,0,REG_DWORD, (LPSTR)&size,sizeof(DWORD));
+ HeapFree(GetProcessHeap(),1,buffer);
+
+ buffer = load_dynamic_property(package,szProductVersion,NULL);
+ if (buffer)
+ {
+ DWORD verdword = build_version_dword(buffer);
+ DWORD vermajor = verdword>>24;
+ DWORD verminor = (verdword>>16)&0x00FF;
+ size = sizeof(DWORD);
+ RegSetValueExW(hkey,szVersion,0,REG_DWORD,(LPSTR)&verdword,size);
+ RegSetValueExW(hkey,szVersionMajor,0,REG_DWORD,(LPSTR)&vermajor,size);
+ RegSetValueExW(hkey,szVersionMinor,0,REG_DWORD,(LPSTR)&verminor,size);
+ }
+ HeapFree(GetProcessHeap(),0,buffer);
+
/* Handle Upgrade Codes */
upgrade_code = load_dynamic_property(package,szUpgradeCode, NULL);
if (upgrade_code)
More information about the wine-patches
mailing list