Windows Installer

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.

Application Details:

Version: 3.1
License: Retail
Votes: 0
Latest Rating: Silver
Latest Wine Version Tested: 1.4-rc4

Maintainers: About Maintainership

No maintainers. Volunteer today!

Test Results

Old test results
The test results you have selected are very old and may not represent the current state of Wine.
Selected Test Results

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;

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,
#ifdef __cplusplus
extern "C" {
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);
- 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",
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,
- 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/ b/tools/
index d43330d..86660a4 100644
--- a/tools/
+++ b/tools/
@@ -142,8 +142,8 @@ WINEPREFIX=`cd "$WINEPREFIX" && pwd`
if [ ! -d "$WINEPREFIX/dosdevices" ]
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:"


What was not tested

Actual function after installation as the installation refused to continue.

Hardware tested


  • GPU:
  • Driver:

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.

selected in Test Results table below
Operating systemTest dateWine versionInstalls?Runs?Used
ShowUbuntu 11.10 "Oneiric" amd64 (+ variants like Kubuntu)Feb 24 20121.4-rc4Yes Yes SilverDaniel Jelinski 
ShowUbuntu 10.10 "Maverick" amd64 (+ variants like Kubuntu)Oct 26 20101.3.5No Not installable GarbageOtso Helenius 
ShowMac OS X 10.6 "Snow Leopard"Jul 28 20101.2No Not installable GarbageWilliam Cody Winter 
ShowFedora 9Dec 16 20081.1.9Yes Yes Silveran anonymous user 
ShowUbuntu 8.10 "Intrepid" i386 (+ variants like Kubuntu)Nov 02 20081.1.7No Not installable GarbageDavid Zaragoza 

Known Bugs

Bug # Description Status Resolution Other apps affected

Show all bugs

HowTo / Notes


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


Comments Disabled

Comments for this application have been disabled because there are no maintainers.