diff --git a/dlls/ntdll/server.c b/dlls/ntdll/server.c index 08ee7843ddc..8564c0aad8c 100644 --- a/dlls/ntdll/server.c +++ b/dlls/ntdll/server.c @@ -752,6 +752,18 @@ static void setup_config_dir(void) mkdir( config_dir, 0777 ); if (chdir( config_dir ) == -1) fatal_perror( "chdir to %s\n", config_dir ); + + if ((p = getenv( "WINEARCH" )) && !strcmp( p, "win32" )) + { + /* force creation of a 32-bit prefix */ + int fd = open( "system.reg", O_WRONLY | O_CREAT | O_EXCL, 0666 ); + if (fd != -1) + { + static const char regfile[] = "WINE REGISTRY Version 2\n\n#arch=win32\n"; + write( fd, regfile, sizeof(regfile) - 1 ); + close( fd ); + } + } MESSAGE( "wine: created the configuration directory '%s'\n", config_dir ); } @@ -1040,6 +1052,7 @@ NTSTATUS server_init_process_done(void) size_t server_init_thread( void *entry_point ) { static const int is_win64 = (sizeof(void *) > sizeof(int)); + const char *arch = getenv( "WINEARCH" ); int ret; int reply_pipe[2]; struct sigaction sig_act; @@ -1090,6 +1103,15 @@ size_t server_init_thread( void *entry_point ) switch (ret) { case STATUS_SUCCESS: + if (arch) + { + if (!strcmp( arch, "win32" ) && (is_win64 || is_wow64)) + fatal_error( "WINEARCH set to win32 but '%s' is a 64-bit installation.\n", + wine_get_config_dir() ); + if (!strcmp( arch, "win64" ) && !is_wow64) + fatal_error( "WINEARCH set to win64 but '%s' is a 32-bit installation.\n", + wine_get_config_dir() ); + } return info_size; case STATUS_NOT_REGISTRY_FILE: fatal_error( "'%s' is a 32-bit installation, it cannot support 64-bit applications.\n", diff --git a/loader/wine.man.in b/loader/wine.man.in index 7d6953c7407..6779b4430ab 100644 --- a/loader/wine.man.in +++ b/loader/wine.man.in @@ -142,8 +142,9 @@ on all relay messages (API calls). .TP WINEDEBUG=relay will turn on all relay messages. For more control on including or excluding -functions and dlls from the relay trace look into the [Debug] section -of the wine configuration file. +functions and dlls from the relay trace, look into the +.B HKEY_CURRENT_USER\\\\Software\\\\Wine\\\\Debug +registry key. .PP For more information on debugging messages, see the .I Running Wine @@ -204,6 +205,19 @@ the builtin load fails; load shell32 always as builtin and comctl32 always as native. Oleaut32 will be disabled. .RE .TP +.I WINEARCH +Specifies the Windows architecture to support. It can be set either to +.B win32 +(support only 32-bit applications), or to +.B win64 +(support both 64-bit applications and 32-bit ones in WoW64 mode). +.br +The architecture supported by a given Wine prefix is set at prefix +creation time and cannot be changed afterwards. When running with an +existing prefix, Wine will refuse to start if +.I WINEARCH +doesn't match the prefix architecture. +.TP .I DISPLAY Specifies the X11 display to use. .TP