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