WineHQ
Windows Installer 3.1



Category: Main > Utilities > Windows Installer > 3.1


NameWindows Installer
Version3.1
License Retail
URLhttp://www.microsoft.com
Votes  
RatingSilver
Wine Version1.4-rc4
Maintainers of this version:
No maintainers. Volunteer today!
Description
Used by Microsoft Windows to manage software packages (like RPM or DEB for Windows). This is the latest version available for Windows XP. Getting this to work would allow LOADS of programs to run on wine.
Old test results
The test results you have selected are very old and may not represent the current state of Wine.
Selected Test Results (selected in 'Test Results' table below)

What works

After applying patch and rebuilding 0.9.58 with changes below, i was able to run the WindowsInstaller-KB893803-v2-x86.exe and after unpacking into temp I received error


Setup has detected that the Service Pack version of this system is newer than the update you are applying. There is no need to install this update.

I see that as a success.

 

 


What does not

i had to apply Hans patch from 2006 to make it work. I added some definitions for clustapi return values so that they are presented in source in human form, the overall patch info:

diff --git a/dlls/clusapi/clusapi.c b/dlls/clusapi/clusapi.c
index 734676c..3aa976c 100644
--- a/dlls/clusapi/clusapi.c
+++ b/dlls/clusapi/clusapi.c
@@ -42,7 +42,8 @@ DWORD WINAPI GetNodeClusterState(LPCWSTR lpszNodeName, LPDWORD pdwClusterState)
{
FIXME("(%s,%p,%u) stub!\n",debugstr_w(lpszNodeName),pdwClusterState, *pdwClusterState);

- *pdwClusterState = 0;
+
+ *pdwClusterState = ClusterStateNotInstalled;

return ERROR_SUCCESS;
}
diff --git a/include/clusapi.h b/include/clusapi.h
index ff4577f..33eefd3 100644
--- a/include/clusapi.h
+++ b/include/clusapi.h
@@ -19,6 +19,18 @@
#ifndef __WINE_CLUSAPI_H
#define __WINE_CLUSAPI_H

+#define CLUSTER_INSTALLED 0x00000001
+#define CLUSTER_CONFIGURED 0x00000002
+#define CLUSTER_RUNNING 0x00000010
+
+typedef enum NODE_CLUSTER_STATE {
+ ClusterStateNotInstalled = 0,
+ ClusterStateNotConfigured = CLUSTER_INSTALLED,
+ ClusterStateNotRunning = CLUSTER_INSTALLED | CLUSTER_CONFIGURED,
+ ClusterStateRunning = CLUSTER_INSTALLED | CLUSTER_CONFIGURED
+ | CLUSTER_RUNNING
+} NODE_CLUSTER_STATE;
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/programs/winecfg/drivedetect.c b/programs/winecfg/drivedetect.c
index 0b07bdf..2482d56 100644
--- a/programs/winecfg/drivedetect.c
+++ b/programs/winecfg/drivedetect.c
@@ -196,7 +196,7 @@ static void report_error(int code)
if (gui_mode)
MessageBox(NULL, "No virtual drive C mapped\n\nTry running wineprefixcreate", "", MB_OK | MB_ICONEXCLAMATION);
else
- fprintf(stderr, "winecfg: no drive_c directory\n");
+ fprintf(stderr, "winecfg: no drive C mapped\n");

case NO_HOME:
if (gui_mode)
@@ -274,14 +274,15 @@ static void ensure_drive_c_is_mapped(void)

if (drives[2].in_use) return;


- len = snprintf(NULL, 0, "%s/../drive_c", configdir);
+ len = snprintf(NULL, 0, "%s/../harddiskvolume1", configdir);
drive_c_dir = HeapAlloc(GetProcessHeap(), 0, len);
- snprintf(drive_c_dir, len, "%s/../drive_c", configdir);
+ snprintf(drive_c_dir, len, "%s/../harddiskvolume1", configdir);
HeapFree(GetProcessHeap(), 0, drive_c_dir);

if (stat(drive_c_dir, &buf) == 0)
{
- add_drive('C', "../drive_c", "Virtual Windows Drive", "0", DRIVE_FIXED);
+ add_drive('C', "../harddiskvolume1", "Virtual Windows Drive", "0",
+ DRIVE_FIXED);
}
else
{
diff --git a/programs/winecfg/driveui.c b/programs/winecfg/driveui.c
index 47aed18..1a5b72f 100644
--- a/programs/winecfg/driveui.c
+++ b/programs/winecfg/driveui.c
@@ -314,7 +314,7 @@ static void on_add_click(HWND dialog)
char label[64];
LoadStringA (GetModuleHandle (NULL), IDS_SYSTEM_DRIVE_LABEL, label,
sizeof(label)/sizeof(label[0]));
- add_drive(new, "../drive_c", label, "", DRIVE_FIXED);
+ add_drive(new, "../harddiskvolume1", label, "", DRIVE_FIXED);
}
else add_drive(new, "/", "", "", DRIVE_UNKNOWN);

@@ -496,7 +496,7 @@ static void on_edit_changed(HWND dialog, WORD id)

path = get_text(dialog, id);
HeapFree(GetProcessHeap(), 0, current_drive->unixpath);
- current_drive->unixpath = path ? path : strdupA("drive_c");
+ current_drive->unixpath = path ? path : strdupA("harddiskvolume1");

WINE_TRACE("set path to %s\n", current_drive->unixpath);

diff --git a/tools/wineprefixcreate.in b/tools/wineprefixcreate.in
index d43330d..86660a4 100644
--- a/tools/wineprefixcreate.in
+++ b/tools/wineprefixcreate.in
@@ -142,8 +142,8 @@ WINEPREFIX=`cd "$WINEPREFIX" && pwd`
if [ ! -d "$WINEPREFIX/dosdevices" ]
then
mkdir "$WINEPREFIX/dosdevices"
- [ -d "$WINEPREFIX/drive_c" ] || mkdir "$WINEPREFIX/drive_c"
- ln -s "../drive_c" "$WINEPREFIX/dosdevices/c:"
+ [ -d "$WINEPREFIX/harddiskvolume1" ] || mkdir "$WINEPREFIX/harddiskvolume1"
+ ln -s "../harddiskvolume1" "$WINEPREFIX/dosdevices/c:"
ln -s "/" "$WINEPREFIX/dosdevices/z:"
fi



What was not tested
Actual function after installation as the installation refused to continue.


Additional Comments

Microsoft installation goes through all drives and is looking for some that contain either "harddisk" or "ramdisk" in their name. In current code, the C drive is created as a folder named drive_c and it is reported as drive_c in QueryDosDeviceA. Hans patch changes the incorrect behavior by changing name from drive_c to harddiskvolume1, which is a lot closer to what the call returns on actual windows platform. The Microsoft installer then finds the magic "harddisk" string and works ok afterwards.
Test Results
DistributionTest dateWine versionInstalls?Runs?RatingSubmitter
ShowUbuntu 11.10 "Oneiric" x86_64 (+ variants like Kubuntu)Feb 24 20121.4-rc4 Yes Yes Silver Daniel Jelinski 
ShowUbuntu 10.10 "Maverick" x86_64 (+ variants like Kubuntu)Oct 26 20101.3.5 No Not installable Garbage Otso Helenius 
ShowMac OS X 10.6 "Snow Leopard"Jul 28 20101.2 No Not installable Garbage William Cody Winter 
ShowFedora 9Dec 16 20081.1.9 Yes Yes Silver an anonymous user 
ShowUbuntu 8.10 "Intrepid" (+ variants like Kubuntu)Nov 02 20081.1.7 No Not installable Garbage David Zaragoza 


Known bugs
Bug # Description Status Resolution Other apps affected
5351 Windows Installer 3.1 cannot install because of non-standard drive labeling CLOSED FIXED View
10698 Windows Installer 3.1 Incorrectly verifies CLOSED FIXED View

 
Note

You do not need the windows installer file in order to extract and install .msi packages

type in:

wine msiexec /i yourfile.msi

wine as of .9.34 has a built in .msi extractor


 




   << Back

Page loaded in 0.09337 seconds.