Wineboot command line

Shachar Shemesh wine-patches at sun.consumer.org.il
Tue Mar 11 00:16:44 CST 2003


P.S.
I am getting spam to the email address I use for sending the code. 
Things are defenitely getting from bad to worse here.

Changelog:
Shachar Shemesh <winecode at sun.consumer.org.il>
programs/wineboot/wineboot.c

    * Implement finer grained control over what gets run.
    * Implement command line to control presets of said control for
      various scenarios
          o start - session startup - run everything.
          o restart - session close (presumeably after reboot) - only
            perform *once operations.

documentation/packaging.sgml

    * Update the winebootup entry to bring it into the millenium of the
      fruitbat.
          o Change name.
          o Document the need of packagers to start the session, and how.

-- 
Shachar Shemesh
Open Source integration consultant
Home page & resume - http://www.shemesh.biz/

-------------- next part --------------
Index: documentation/packaging.sgml
===================================================================
RCS file: /home/sun/sources/cvs/wine/documentation/packaging.sgml,v
retrieving revision 1.14
diff -u -r1.14 packaging.sgml
--- documentation/packaging.sgml	28 Jan 2003 01:06:50 -0000	1.14
+++ documentation/packaging.sgml	11 Mar 2003 06:06:48 -0000
@@ -330,16 +330,20 @@
                     </listitem>
                   </varlistentry>
 
-                  <varlistentry><term><filename>winebootup</filename></term>
+                  <varlistentry><term><filename>wineboot</filename></term>
                     <listitem>
                     <para>
 		    Winelib app to be found in programs/.
-		    It'll be called by the winelauncher wine wrapper startup
-		    script for every first-time wine invocation.
 		    Its purpose is to process all Windows startup autorun
 		    mechanisms, such as wininit.ini, win.ini Load=/Run=,
 		    registry keys: RenameFiles/Run/RunOnce*/RunServices*,
 		    Startup folders.
+		    It'll be called by Wine automatically when an application
+                    requests a restart of the system (presumeably - after
+                    installation).
+                    It should also be called once when a session starts to
+                    run the various session start utilities (will not happen
+                    automatically). To start a session, invoke "wineboot start".
                     </para>
                     </listitem>
                   </varlistentry>
Index: programs/wineboot/wineboot.c
===================================================================
RCS file: /home/sun/sources/cvs/wine/programs/wineboot/wineboot.c,v
retrieving revision 1.7
diff -u -r1.7 wineboot.c
--- programs/wineboot/wineboot.c	12 Feb 2003 01:14:08 -0000	1.7
+++ programs/wineboot/wineboot.c	11 Mar 2003 05:58:18 -0000
@@ -522,8 +522,22 @@
     return res==ERROR_SUCCESS?TRUE:FALSE;
 }
 
+struct op_mask {
+    BOOL w9xonly; /* Perform only operations done on Windows 9x */
+    BOOL ntonly; /* Perform only operations done on Windows NT */
+    BOOL startup; /* Perform the operations that are performed every boot */
+    BOOL preboot; /* Perform file renames typically done before the system starts */
+    BOOL prelogin; /* Perform the operations typically done before the user logs in */
+    BOOL postlogin; /* Operations done after login */
+};
+
+static const struct op_mask SESSION_START={FALSE, FALSE, TRUE, TRUE, TRUE, TRUE},
+    SETUP={FALSE, FALSE, FALSE, TRUE, TRUE, TRUE},
+    DEFAULT=SESSION_START;
+
 int main( int argc, char *argv[] )
 {
+    struct op_mask ops; /* Which of the ops do we want to perform? */
     /* First, set the current directory to SystemRoot */
     TCHAR gen_path[MAX_PATH];
     DWORD res;
@@ -552,19 +566,42 @@
         return 100;
     }
 
-    /* Perform the operations by order, stopping if one fails */
-    res=wininit()&&
-        pendingRename() &&
-        ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUNSERVICESONCE],
-                TRUE, FALSE ) &&
-        ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUNSERVICES],
-                FALSE, FALSE ) &&
-        ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUNONCE],
-                TRUE, TRUE ) &&
-        ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUN],
-                FALSE, FALSE ) &&
-        ProcessRunKeys( HKEY_CURRENT_USER, runkeys_names[RUNKEY_RUN],
-                FALSE, FALSE );
+    if( argc>1 )
+    {
+        switch( argv[1][0] )
+        {
+        case 'r': /* Restart */
+            ops=SETUP;
+            break;
+        case 's': /* Full start */
+            ops=SESSION_START;
+            break;
+        default:
+            ops=DEFAULT;
+            break;
+        }
+    } else
+        ops=DEFAULT;
+
+    /* Perform the ops by order, stopping if one fails, skipping if necessary */
+    /* Shachar: Sorry for the perl syntax */
+    res=(ops.ntonly || !ops.preboot || wininit())&&
+        (ops.w9xonly || !ops.preboot || pendingRename()) &&
+        (ops.ntonly || !ops.prelogin ||
+         ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUNSERVICESONCE],
+                TRUE, FALSE )) &&
+        (ops.ntonly || !ops.prelogin || !ops.startup ||
+         ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUNSERVICES],
+                FALSE, FALSE )) &&
+        (!ops.postlogin ||
+         ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUNONCE],
+                TRUE, TRUE )) &&
+        (!ops.postlogin || !ops.startup ||
+         ProcessRunKeys( HKEY_LOCAL_MACHINE, runkeys_names[RUNKEY_RUN],
+                FALSE, FALSE )) &&
+        (!ops.postlogin || !ops.startup ||
+         ProcessRunKeys( HKEY_CURRENT_USER, runkeys_names[RUNKEY_RUN],
+                FALSE, FALSE ));
 
     WINE_TRACE("Operation done\n");
 


More information about the wine-patches mailing list