Skip to content
Snippets Groups Projects
Commit a058584d authored by Alexandre Julliard's avatar Alexandre Julliard
Browse files

Explicitly call VERSION_Init with the main exe file name, so that

application settings work for Win16 and DOS apps too.
parent bc5b931d
No related branches found
No related tags found
No related merge requests found
......@@ -332,14 +332,12 @@ static void VERSION_ParseVersion( HKEY hkey, BOOL *got_win_ver, BOOL *got_dos_ve
/**********************************************************************
* VERSION_Init
*/
static void VERSION_Init(void)
void VERSION_Init( const char *appname )
{
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
HKEY hkey, config_key;
BOOL got_win_ver = FALSE, got_dos_ver = FALSE;
WCHAR buffer[MAX_PATH], appversion[MAX_PATH+20], *appname, *p;
static BOOL init_done;
static const WCHAR configW[] = {'M','a','c','h','i','n','e','\\',
'S','o','f','t','w','a','r','e','\\',
'W','i','n','e','\\',
......@@ -348,17 +346,6 @@ static void VERSION_Init(void)
static const WCHAR appdefaultsW[] = {'A','p','p','D','e','f','a','u','l','t','s','\\',0};
static const WCHAR versionW[] = {'\\','V','e','r','s','i','o','n',0};
if (init_done) return;
if (!GetModuleFileNameW( 0, buffer, MAX_PATH ))
{
WARN( "could not get module file name\n" );
return;
}
init_done = TRUE;
appname = buffer;
if ((p = strrchrW( appname, '/' ))) appname = p + 1;
if ((p = strrchrW( appname, '\\' ))) appname = p + 1;
attr.Length = sizeof(attr);
attr.RootDirectory = 0;
attr.ObjectName = &nameW;
......@@ -371,20 +358,32 @@ static void VERSION_Init(void)
attr.RootDirectory = config_key;
/* open AppDefaults\\appname\\Version key */
strcpyW( appversion, appdefaultsW );
strcatW( appversion, appname );
strcatW( appversion, versionW );
RtlInitUnicodeString( &nameW, appversion );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
if (appname && *appname)
{
VERSION_ParseVersion( hkey, &got_win_ver, &got_dos_ver );
NtClose( hkey );
const char *p;
DWORD len;
WCHAR appversion[MAX_PATH+20];
if ((p = strrchr( appname, '/' ))) appname = p + 1;
if ((p = strrchr( appname, '\\' ))) appname = p + 1;
strcpyW( appversion, appdefaultsW );
len = strlenW(appversion);
RtlMultiByteToUnicodeN( appversion + len, sizeof(appversion) - len*sizeof(WCHAR),
&len, appname, strlen(appname)+1 );
strcatW( appversion, versionW );
TRACE( "getting version from %s\n", debugstr_w(appversion) );
RtlInitUnicodeString( &nameW, appversion );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
{
VERSION_ParseVersion( hkey, &got_win_ver, &got_dos_ver );
NtClose( hkey );
}
if (got_win_ver && got_dos_ver) goto done;
}
if (got_win_ver && got_dos_ver) goto done;
TRACE( "getting default version\n" );
RtlInitUnicodeString( &nameW, versionW + 1 );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
{
......@@ -569,24 +568,16 @@ static WINDOWS_VERSION VERSION_GetVersion(void)
{
static WORD winver = 0xffff;
if (versionForced) return forcedWinVersion; /* user has overridden any sensible checks */
if (winver == 0xffff) /* to be determined */
{
WINDOWS_VERSION retver;
VERSION_Init();
if (versionForced) /* user has overridden any sensible checks */
winver = forcedWinVersion;
else
{
retver = VERSION_GetLinkedDllVersion();
/* cache determined value, but do not store in case of WIN31 */
if (retver != WIN31) winver = retver;
WINDOWS_VERSION retver = VERSION_GetLinkedDllVersion();
return retver;
}
/* cache determined value, but do not store in case of WIN31 */
if (retver != WIN31) winver = retver;
return retver;
}
return winver;
}
......
......@@ -132,6 +132,7 @@ extern void PTHREAD_init_done(void);
extern void RELAY_InitDebugLists(void);
extern BOOL MAIN_MainInit(void);
extern void VERSION_Init( const char *appname );
typedef WORD (WINAPI *pUserSignalProc)( UINT, DWORD, DWORD, HMODULE16 );
......@@ -612,6 +613,7 @@ void PROCESS_InitWine( int argc, char *argv[], LPSTR win16_exe_name, HANDLE *win
MESSAGE( "%s: cannot open builtin library for '%s': %s\n", argv0, main_exe_name, error );
ExitProcess(1);
}
VERSION_Init( main_exe_name );
switch( MODULE_GetBinaryType( main_exe_file ))
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment