You got me!
As far as the WDController.exe program goes, it was my first attempt in C win32 api programming, after a LONG break, and is such that I'm emabarassed to post the code without cleaning it up a bit... Have you ever seen a program attempt to duplicate all the handles on a system for no reason? I was hoping no one would call me out on it. I'll release it, just don't know when... I know its against the rules, but what can I say, its my reputation on the line.
Here is the inno setup code...
[Setup]
AppName=Web-Developer Server Suite
AppVerName=Web-Developer Server Suite v1.95
SetupIconFile=wdicon.ico
DefaultDirName={drive:{src}}\www
DefaultGroupName=Web-Developer Server Suite
MinVersion=0,5.0.2195
SourceDir=\www
OutputBaseFilename=wdsetup-v1.95
PrivilegesRequired=admin
AlwaysRestart=true
SolidCompression=yes
Compression=lzma/max
LicenseFile=license.txt
InfoBeforeFile=requirements.txt
InfoAfterFile=readme1st.txt
CreateAppDir=yes
DisableDirPage=yes
DirExistsWarning=yes
AlwaysShowDirOnReadyPage=yes
[Components]
Name: "controller"; Description: "Web-Developer Controller with Dynamic DNS Client"; Types: full compact custom; Flags: fixed
Name: "wamp_core"; Description: "WAMP Core"; Types: full compact custom; Flags: fixed
Name: "wamp_core\httpd"; Description: "Apache Server [2.2.4]"; Types: full compact custom; Flags:
Name: "wamp_core\httpd\mod_ssl"; Description: "mod_ssl [openssl 0.9.8e]"; Types: full compact custom; Flags:
Name: "wamp_core\httpd\mod_deflate"; Description: "mod_deflate [zlib 1.2.3]"; Types: full compact custom; Flags:
Name: "wamp_core\mysql5"; Description: "MySQL [5.0.37]"; Types: full compact custom; Flags:
Name: "wamp_core\php5"; Description: "PHP [5.2.1]"; Types: full compact custom; Flags:
Name: "extra_modules"; Description: "Additional httpd Modules"; Types: full custom; Flags:
;Name: "extra_modules\mod_aspdotnet"; Description: "mod_aspdotnet [2.2.2004]"; Types: full custom; Flags:
Name: "extra_modules\mod_security"; Description: "mod_security [2.1.0]"; Types: full custom; Flags:
Name: "extra_modules\mod_fastcgi"; Description: "mod_fastcgi [2.4.2]"; Types: full custom; Flags:
Name: "perl"; Description: "Perl [5.8.8]"; Types: full custom; Flags: checkablealone
Name: "perl\mod_perl"; Description: "mod_perl"; Types: full custom; Flags:
;Name: "tomcat5"; Description: "Tomcat [5.5.20]"; Types: full custom; Flags: checkablealone
;Name: "tomcat5\mod_jk"; Description: "mod_jk [1.2.19]"; Types: full custom; Flags:
Name: "openssl"; Description: "OpenSSL [0.9.8e]"; Types: full custom; Flags:
Name: "analog"; Description: "Analog [6.0]"; Types: full custom; Flags:
Name: "phpmyadmin"; Description: "phpMyAdmin [2.10.0.2]"; Types: full custom; Flags:
Name: "webframework"; Description: "Web-Framework Applications"; Types: full custom; Flags:
Name: "webframework\joomla"; Description: "Joomla CMS [1.0.12]"; Types: full custom; Flags:
Name: "webframework\drupal"; Description: "Drupal CMS [5.1.0]"; Types: full custom; Flags:
Name: "webframework\wordpress"; Description: "WordPress Blog [2.1.2]"; Types: full custom; Flags:
Name: "webframework\mediawiki"; Description: "MediaWiki Wiki [1.9.3]"; Types: full custom; Flags:
Name: "webframework\phpbb2"; Description: "phpBB2 Forums [2.0.22]"; Types: full custom; Flags:
[Dirs]
Name: "{app}\tmp"
[Files]
Source: "wdremove.ico"; DestDir: "{app}"
Source: "WDController.exe"; DestDir: "{app}"; Components: controller; Flags:
Source: "Apache22\*"; Excludes: "bin\Apache.Web.dll,bin\Apache.Web.Helpers.netmodule,bin\Register-mod_aspdotnet.bat,bin\UnRegister-mod_aspdotnet.bat,conf\Suite-extra\components.conf,logs\*,modules\mod_aspdotnet.so,modules\mod_security2.dll,modules\mod_fastcgi.so,modules\mod_deflate.so,modules\mod_perl.so,modules\mod_jk.so,modules\mod_ssl.so,conf\Suite-extra\workers.properties"; DestDir: "{app}\Apache22"; Components: wamp_core\httpd; Flags: recursesubdirs createallsubdirs
Source: "Apache22\modules\mod_ssl.so"; DestDir: "{app}\Apache22\modules"; Components: wamp_core\httpd\mod_ssl; Flags:
Source: "Apache22\modules\mod_deflate.so"; DestDir: "{app}\Apache22\modules"; Components: wamp_core\httpd\mod_deflate; Flags:
Source: "php5\*"; DestDir: "{app}\php5"; Components: wamp_core\php5; Flags: recursesubdirs createallsubdirs
Source: "mysql5\*"; DestDir: "{app}\mysql5"; Components: wamp_core\mysql5; Flags: recursesubdirs createallsubdirs
;Source: "Apache22\modules\mod_aspdotnet.so"; DestDir: "{app}\Apache22\modules"; Components: extra_modules\mod_aspdotnet; Flags:
;Source: "Apache22\bin\Apache.Web.dll"; DestDir: "{app}\Apache22\bin"; Components: extra_modules\mod_aspdotnet; Flags:
;Source: "Apache22\bin\Apache.Web.Helpers.netmodule"; DestDir: "{app}\Apache22\bin"; Components: extra_modules\mod_aspdotnet; Flags:
;Source: "Apache22\bin\Register-mod_aspdotnet.bat"; DestDir: "{app}\Apache22\bin"; Components: extra_modules\mod_aspdotnet; Flags:
;Source: "Apache22\bin\UnRegister-mod_aspdotnet.bat"; DestDir: "{app}\Apache22\bin"; Components: extra_modules\mod_aspdotnet; Flags:
Source: "Apache22\modules\mod_security2.dll"; DestDir: "{app}\Apache22\modules"; Components: extra_modules\mod_security; Flags:
Source: "Apache22\modules\mod_fastcgi.so"; DestDir: "{app}\Apache22\modules"; Components: extra_modules\mod_fastcgi; Flags:
Source: "perl\*"; DestDir: "{app}\perl"; Components: perl; Flags: recursesubdirs createallsubdirs
Source: "Apache22\modules\mod_perl.so"; DestDir: "{app}\Apache22\modules"; Components: perl\mod_perl; Flags:
;Source: "tomcat5\*"; Excludes: "work\*"; DestDir: "{app}\tomcat5"; Components: tomcat5; Flags: recursesubdirs createallsubdirs
;Source: "Apache22\modules\mod_jk.so"; DestDir: "{app}\Apache22\modules"; Components: tomcat5\mod_jk; Flags:
;Source: "Apache22\conf\Suite-extra\workers.properties"; DestDir: "{app}\Apache22\conf\Suite-extra"; Components: tomcat5\mod_jk; Flags:
Source: "openssl\*"; DestDir: "{app}\openssl"; Components: openssl; Flags: recursesubdirs createallsubdirs
Source: "analog\*"; DestDir: "{app}\analog"; Components: analog; Flags: recursesubdirs createallsubdirs
Source: "phpmyadmin\*"; DestDir: "{app}\phpmyadmin"; Components: phpmyadmin; Flags: recursesubdirs createallsubdirs
Source: "my.ini"; DestDir: "{win}"; Components: wamp_core\mysql5; Flags: ignoreversion
Source: "php.ini"; DestDir: "{win}"; Components: wamp_core\php5; Flags: ignoreversion
Source: "webroot\*"; Excludes: "stats\*,aspsample\*"; DestDir: "{app}\webroot"; Components: wamp_core\httpd; Flags: recursesubdirs createallsubdirs
Source: "cgi-bin\*"; DestDir: "{app}\cgi-bin"; Components: wamp_core\httpd; Flags: recursesubdirs createallsubdirs
Source: "private\*"; DestDir: "{app}\private"; Components: wamp_core\httpd; Flags: recursesubdirs createallsubdirs
Source: "fcgi-bin\*"; DestDir: "{app}\fcgi-bin"; Components: extra_modules\mod_fastcgi; Flags: recursesubdirs createallsubdirs
Source: "webroot\stats\*"; DestDir: "{app}\webroot\stats"; Components: analog; Flags: recursesubdirs createallsubdirs
;Source: "webroot\aspsample\*"; DestDir: "{app}\webroot\aspsample"; Components: extra_modules\mod_aspdotnet; Flags: recursesubdirs createallsubdirs
Source: "changelog.txt"; DestDir: "{app}"; Components: wamp_core; Flags:
;Source: "php4\*"; DestDir: "{app}\php4"; Flags: recursesubdirs createallsubdirs
;Source: "PHP4Downgrade.txt"; DestDir: "{app}"; Components: wamp_core\php5; Flags:
Source: "php5\libmysql.dll"; DestDir: "{sys}"; Components: wamp_core\php5; Flags: ignoreversion onlyifdestfileexists
Source: "php5\ext\php_mysql.dll"; DestDir: "{sys}"; Components: wamp_core\php5; Flags: ignoreversion onlyifdestfileexists
Source: "php5\ext\php_mysqli.dll"; DestDir: "{sys}"; Components: wamp_core\php5; Flags: ignoreversion onlyifdestfileexists
Source: "components.conf"; DestDir: "{app}\Apache22\conf\Suite-extra\"; Flags: ignoreversion
Source: "components.bat"; DestDir: "{app}"; Flags: ignoreversion deleteafterinstall
;Source: "mysqlbatch.bat"; DestDir: "{app}"; Flags: ignoreversion deleteafterinstall
;Source: "webappsdb.bat"; DestDir: "{app}"; Flags: ignoreversion deleteafterinstall
;Source: "webappsdb.sql"; DestDir: "{app}"; Flags: ignoreversion deleteafterinstall
Source: "gpl.txt"; DestDir: "{app}"; Flags:
Source: "license.txt"; DestDir: "{app}"; Flags:
Source: "requirements.txt"; DestDir: "{app}"; Flags:
Source: "readme1st.txt"; DestDir: "{app}"; Flags:
Source: "WDC\*"; Excludes: "controller.log"; DestDir: "{app}\WDC"; Flags: recursesubdirs createallsubdirs
Source: "webapps\joomla\*"; DestDir: "{app}\webapps\joomla"; Components: webframework\joomla; Flags: recursesubdirs createallsubdirs
Source: "webapps\drupal\*"; DestDir: "{app}\webapps\drupal"; Components: webframework\drupal; Flags: recursesubdirs createallsubdirs
Source: "webapps\wordpress\*"; DestDir: "{app}\webapps\wordpress"; Components: webframework\wordpress; Flags: recursesubdirs createallsubdirs
Source: "webapps\mediawiki\*"; DestDir: "{app}\webapps\mediawiki"; Components: webframework\mediawiki; Flags: recursesubdirs createallsubdirs
Source: "webapps\phpbb2\*"; DestDir: "{app}\webapps\phpbb2"; Components: webframework\phpbb2; Flags: recursesubdirs createallsubdirs
[Icons]
Name: "{group}\Web-Developer Controller"; Filename: "{app}\WDController.exe"; WorkingDir: "{app}"; Components: controller
Name: "{group}\Web-Developer Manual"; Filename: "{app}\WDC\wd-guide\index.html"
Name: "{group}\Uninstall"; Filename: "{uninstallexe}"; IconFilename: "{app}\wdremove.ico"
Name: "{userdesktop}\Web-Developer Controller"; Filename: "{app}\WDController.exe"; WorkingDir: "{app}"; Components: controller
[Run]
Filename: "components.bat"; Parameters: "FastCGI mod_fastcgi.conf"; WorkingDir: "{app}"; Components: extra_modules\mod_fastcgi; Flags: runhidden; StatusMsg: "Enabling FastCGI..."
Filename: "components.bat"; Parameters: "mod_security mod_security2.conf"; WorkingDir: "{app}"; Components: extra_modules\mod_security; Flags: runhidden; StatusMsg: "Enabling mod_security..."
Filename: "components.bat"; Parameters: "mod_perl mod_perl.conf"; WorkingDir: "{app}"; Components: perl\mod_perl; Flags: runhidden; StatusMsg: "Enabling mod_perl..."
Filename: "components.bat"; Parameters: "phpMyAdmin phpmyadmin.conf"; WorkingDir: "{app}"; Components: phpmyadmin; Flags: runhidden; StatusMsg: "Enabling phpMyAdmin..."
Filename: "components.bat"; Parameters: "Analog analog.conf"; WorkingDir: "{app}"; Components: analog; Flags: runhidden; StatusMsg: "Enabling Analog..."
Filename: "components.bat"; Parameters: "Joomla webapps/joomla.conf"; WorkingDir: "{app}"; Components: webframework\joomla; Flags: runhidden; StatusMsg: "Enabling Joomla..."
Filename: "components.bat"; Parameters: "Drupal webapps/drupal.conf"; WorkingDir: "{app}"; Components: webframework\drupal; Flags: runhidden; StatusMsg: "Enabling Drupal..."
Filename: "components.bat"; Parameters: "WordPress webapps/wordpress.conf"; WorkingDir: "{app}"; Components: webframework\wordpress; Flags: runhidden; StatusMsg: "Enabling WordPress..."
Filename: "components.bat"; Parameters: "MediaWiki webapps/mediawiki.conf"; WorkingDir: "{app}"; Components: webframework\mediawiki; Flags: runhidden; StatusMsg: "Enabling MediaWiki..."
Filename: "components.bat"; Parameters: "phpBB2 webapps/phpbb2.conf"; WorkingDir: "{app}"; Components: webframework\phpbb2; Flags: runhidden; StatusMsg: "Enabling phpBB2..."
Filename: "{app}\Apache22\bin\httpd.exe"; Parameters: "-D SSL -k install"; Components: wamp_core\httpd; Flags: runhidden; StatusMsg: "Installing the Apache2.2 Service..."
Filename: "{app}\mysql5\bin\mysqld-nt.exe"; Parameters: "install"; Components: wamp_core\mysql5; Flags: runhidden; StatusMsg: "Installing the MySQL[5] Service..."
Filename: "{sys}\net.exe"; Parameters: "start Apache2.2"; Components: wamp_core\httpd; Flags: runhidden; StatusMsg: "Starting the Apache2.2 Service..."
Filename: "{sys}\net.exe"; Parameters: "start MySQL"; Components: wamp_core\mysql5; Flags: runhidden; StatusMsg: "Starting the MySQL[5] Service..."
;error -- we need to clean this file beforehand
;Filename: "webappsdb.bat"; Parameters: "joomla"; WorkingDir: "{app}"; Components: webframework\joomla; Flags: runhidden; StatusMsg: "Creating db/user for Joomla..."
;Filename: "webappsdb.bat"; Parameters: "drupal"; WorkingDir: "{app}"; Components: webframework\drupal; Flags: runhidden; StatusMsg: "Creating db/user for Drupal..."
;Filename: "webappsdb.bat"; Parameters: "wordpress"; WorkingDir: "{app}"; Components: webframework\wordpress; Flags: runhidden; StatusMsg: "Creating db/user for WordPress..."
;Filename: "webappsdb.bat"; Parameters: "mediawiki"; WorkingDir: "{app}"; Components: webframework\mediawiki; Flags: runhidden; StatusMsg: "Creating db/user for MediaWiki..."
;Filename: "webappsdb.bat"; Parameters: "phpbb2"; WorkingDir: "{app}"; Components: webframework\phpbb2; Flags: runhidden; StatusMsg: "Creating db/user for phpBB2..."
;Filename: "mysqlbatch.bat"; Flags: runhidden; StatusMsg: "Updating MySQL Database for Selected Web Applications..."
;Filename: "{app}\mysql5\bin\mysql.exe"; Parameters: "-uroot -prootwdp < webappsdb.sql"; Components: webframework; Flags: runhidden; StatusMsg: "Updating MySQL Database for Selected Web Applications..."
[UninstallRun]
Filename: "{sys}\net.exe"; Parameters: "stop Apache2.2"; Components: wamp_core\httpd; Flags: runhidden; StatusMsg: "Stopping the Apache2.2 Service..."
Filename: "{sys}\net.exe"; Parameters: "stop MySQL"; Components: wamp_core\mysql5; Flags: runhidden; StatusMsg: "Stopping the MySQL[5] Service..."
;Filename: "{sys}\net.exe"; Parameters: "stop Tomcat5"; Components: tomcat5; Flags: runhidden; StatusMsg: "Stopping the Tomcat5 Service..."
Filename: "{app}\Apache22\bin\httpd.exe"; Parameters: "-k uninstall"; Components: wamp_core\httpd; Flags: runhidden; StatusMsg: "Uninstalling the Apache2.2 Service..."
Filename: "{app}\mysql5\bin\mysqld-nt.exe"; Parameters: "remove"; Components: wamp_core\mysql5; Flags: runhidden; StatusMsg: "Uninstalling the MySQL[5] Service..."
;Filename: "{app}\tomcat5\bin\service.bat"; Parameters: "uninstall"; Components: tomcat5; Flags: runhidden; StatusMsg: "Uninstalling the Tomcat5 Service..."
;add reg/unreg for mod_aspdotnet? test for .net and jdk -- see inno examples
[UninstallDelete]
Type: filesandordirs; Name: "{app}"
;maybe save data
[INI]
Filename: "{win}\my.ini"; Section: "client"; Key: "socket"; String: " {code:MyAppPathUnix}/tmp/mysql.sock"; Components: wamp_core\mysql5
Filename: "{win}\my.ini"; Section: "mysqld"; Key: "socket"; String: " {code:MyAppPathUnix}/tmp/mysql.sock"; Components: wamp_core\mysql5
Filename: "{win}\my.ini"; Section: "mysqld"; Key: "basedir"; String: " {code:MyAppPathUnix}/mysql5/"; Components: wamp_core\mysql5
Filename: "{win}\my.ini"; Section: "mysqld"; Key: "datadir"; String: " {code:MyAppPathUnix}/mysql5/data/"; Components: wamp_core\mysql5
Filename: "{win}\php.ini"; Section: "PHP"; Key: "include_path"; String: " "".;{code:MyAppPathUnix}/webroot/;{code:MyAppPathUnix}/php5/includes/"""; Components: wamp_core\php5
Filename: "{win}\php.ini"; Section: "PHP"; Key: "doc_root"; String: " {code:MyAppPathUnix}/webroot/"; Components: wamp_core\php5
Filename: "{win}\php.ini"; Section: "PHP"; Key: "extension_dir"; String: " {code:MyAppPathUnix}/php5/ext/"; Components: wamp_core\php5
Filename: "{win}\php.ini"; Section: "Session"; Key: "session.save_path"; String: " {code:MyAppPathUnix}/tmp/"; Components: wamp_core\php5
[Registry]
;can break up string into components
;in code, test for presence of value, in script use check:
;Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "webdev"; ValueData: "{app}\openssl\bin;{app}\Apache22\bin;{app}\php5;{app}\mysql5\bin;{app}\perl\bin;{app}\tomcat5\bin"; Flags:
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "webdev"; ValueData: "{app}\openssl\bin;{app}\Apache22\bin;{app}\php5;{app}\mysql5\bin;{app}\perl\bin"; Flags:
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};%webdev%"; Flags:; BeforeInstall: CleanPath
[Code]
//this is only for the ini section to correct {app} from windows '\' to unix '/'
function MyAppPathUnix(Param: String): String;
begin
Result := ExpandConstant('{drive:{src}}/www');
end;
procedure CleanPath();
var
sPath: String;
begin
//also function POS
if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', sPath) then
begin
// Successfully read the value
StringChangeEx(sPath, ';%webdev%', '', True);
RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', sPath);
end;
end;
[/code]