Explicitly call VERSION_Init with the main exe file name, so that
application settings work for Win16 and DOS apps too.

diff --git a/misc/version.c b/misc/version.c
index 8bea96f..daa428c 100644
--- a/misc/version.c
+++ b/misc/version.c
@@ -332,14 +332,12 @@
 /**********************************************************************
  *         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 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 @@
     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 WORD winver = 0xffff;
 
+    if (versionForced) return forcedWinVersion;  /* user has overridden any sensible checks */
+
     if (winver == 0xffff) /* to be determined */
     {
-        WINDOWS_VERSION retver;
+        WINDOWS_VERSION retver = VERSION_GetLinkedDllVersion();
 
-        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;
-
-	    return retver;
-	}
+        /* cache determined value, but do not store in case of WIN31 */
+        if (retver != WIN31) winver = retver;
+        return retver;
     }
-
     return winver;
 }