Application Details:
Version: | 3.1 |
License: | Retail |
URL: | http://www.microsoft.com |
Votes: | 0 |
Latest Rating: | Silver |
Latest Wine Version Tested: | 1.4-rc4 |
Maintainers: About Maintainership
No maintainers. Volunteer today!
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
Workarounds
What was not tested
Actual function after installation as the installation refused to continue.
Hardware tested
Graphics:
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.
Operating system | Test date | Wine version | Installs? | Runs? | Used Workaround? | Rating | Submitter | ||
Show | Ubuntu 11.10 "Oneiric" amd64 (+ variants like Kubuntu) | Feb 24 2012 | 1.4-rc4 | Yes | Yes | No | Silver | Daniel Jelinski | |
Show | Ubuntu 10.10 "Maverick" amd64 (+ variants like Kubuntu) | Oct 26 2010 | 1.3.5 | No | Not installable | No | Garbage | Otso Helenius | |
Show | Mac OS X 10.6 "Snow Leopard" | Jul 28 2010 | 1.2 | No | Not installable | No | Garbage | William Cody Winter | |
Show | Fedora 9 | Dec 16 2008 | 1.1.9 | Yes | Yes | No | Silver | an anonymous user | |
Show | Ubuntu 8.10 "Intrepid" i386 (+ variants like Kubuntu) | Nov 02 2008 | 1.1.7 | No | Not installable | No | Garbage | David Zaragoza |
Bug # | Description | Status | Resolution | Other apps affected |
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 for this application have been disabled because there are no maintainers.