Wineboot command line

Shachar Shemesh wine-patches at sun.consumer.org.il
Tue Mar 11 09:53:36 CST 2003


I'll be forgetting my own head next.

The attach patch is against my previous patch. Nothing major. Just 
causing it to compile.

            Shachar


Shachar Shemesh wrote:

> 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.
>
>------------------------------------------------------------------------
>
>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");
> 
>  
>


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

-------------- next part --------------
--- programs/wineboot/wineboot.c.orig	2003-03-11 17:50:19.000000000 +0200
+++ programs/wineboot/wineboot.c	2003-03-11 17:50:38.000000000 +0200
@@ -532,8 +532,8 @@
 };
 
 static const struct op_mask SESSION_START={FALSE, FALSE, TRUE, TRUE, TRUE, TRUE},
-    SETUP={FALSE, FALSE, FALSE, TRUE, TRUE, TRUE},
-    DEFAULT=SESSION_START;
+    SETUP={FALSE, FALSE, FALSE, TRUE, TRUE, TRUE};
+#define DEFAULT SESSION_START
 
 int main( int argc, char *argv[] )
 {


More information about the wine-patches mailing list