Kdyer
KiX Supporter
   
Registered: 2001-01-03
Posts: 6241
Loc: Tigard, OR
|
MCA,
No need for "TO DO." As I have already done it! I have put the code on a bit of a diet.
WINSTALL.KIX
code:
CLS $pgmvers='2.02' $regkey='HKEY_LOCAL_MACHINE\software\microsoft\windows' IF (@inwin = 1) $windir=ReadValue($regkey+' NT\currentversion', 'SystemRoot') $nt_mode='yes' $maxfile='1' ELSE $windir=ReadValue($regkey+'\currentversion', 'SystemRoot') $nt_mode='no' $maxfile='4' ENDIF $systemdrive=Substr($windir,1,3) $destdir=$systemdrive+'Scripts' IF 0=EXIST($destdir) MD $destdir ENDIF IF (Substr($destdir,len($destdir),1)<>'\') $destdir=$destdir+'\' ENDIF call 'wstart1.kix' :end $systemdrive=Substr($windir,1,3) $flstring='kix'+substr(@kix,1,1)+substr(@kix,3,2)+'w.ok' IF (RedirectOutput('CON')=0) ENDIF IF Exist($systemdrive+$flstring) OR Exist($destdir+$flstring) $message='Installation of Kixtart '+@kix+' CONSOLE-LESS version completed from "'+LCASE(@curdir)+'".' $message=$message+' File "'+UCASE($flstring)+'" created.' ELSE $message='Installation of Kixtart '+@kix+' CONSOLE-LESS version incompleted from "'+LCASE(@curdir)+'".' $message=$message+' No file "'+UCASE($flstring)+'" created.' ENDIF break on flushkb
WSTART1.KIX
code:
CLS BREAK ON $pgmvers='3.08' $tmpdir=ExpandEnvironmentVars('%tmp%') IF (Substr($tmpdir,Len($tmpdir),1)<>'\') $tmpdir=$tmpdir+'\' ENDIF $reqd='no' IF (Len(ExpandEnvironmentVars(Chr(37)+'kix-only-required'+Chr(37)))<>0) IF ($ntmode='yes') $reqd='yes' ENDIF ENDIF $show_mode='no' IF (Len(ExpandEnvironmentVars(Chr(37)+'kix-show'+Chr(37)))<>0) $show_mode='yes' ENDIF $timestart=@time BREAK OFF IF (RedirectOutput('nul',1)=0) ENDIF $sourcedir=@curdir IF (Substr($sourcedir,Len($sourcedir),1)<>'\') $sourcedir=$sourcedir+'\' ENDIF $consmode='yes' ; - wkix32.exe - DIM $kixfil[$maxfile+1] $kixfil[0]='kix'+Substr(@kix,1,1)+Substr(@kix,3,2)+'w.ok' ; - check file - $kixfil[1]='wkix32.exe' $kixfil[2]='kx16.dll' $kixfil[3]='kx32.dll' $kixfil[4]='kx95.dll' ; $first_installation='yes' IF (Exist($systemdrive+$kixfil[0])=0) DEL $systemdrive+'\kix*.ok' ; - other installed kixtart versions removing always - ENDIF IF (Exist($destdir+$kixfil[0])=1) $first_installation='no' ELSE DEL $windir+'kix*.ok' ; - other installed kixtart versions - ENDIF $update='no' $updateinfo='' $i=1 WHILE ($i <= $maxfile) $source_file=$sourcedir+$kixfil[$i] $destfile=$destdir+$kixfil[$i] IF (Exist($destfile)=1) IF (SetFileAttr($destfile, 128)<>0) ENDIF ENDIF $update='yes' IF (Exist($source_file)=1) $update='no' IF (GetFileSize($source_file)<>GetFileSize($destfile)) $update='yes' ENDIF IF (GetFileTime($source_file)<>GetFileTime($destfile)) $update='yes' ENDIF IF (GetFileVersion($source_file,'filedescription')<>GetFileVersion($destfile,'filedescription')) $update='yes' ENDIF IF (GetFileVersion($source_file,'fileversion')<>GetFileVersion($destfile,'fileversion')) $update='yes' ENDIF IF (GetFileVersion($source_file,'internalname')<>GetFileVersion($destfile,'internalname')) $update='yes' ENDIF IF (GetFileVersion($source_file,'language')<>GetFileVersion($destfile,'language')) $update='yes' ENDIF IF (GetFileVersion($source_file,'originalfilename')<>GetFileVersion($destfile,'originalfilename')) $update='yes' ENDIF IF (GetFileVersion($source_file,'productname')<>GetFileVersion($destfile,'productname')) $update='yes' ENDIF ENDIF ; IF ($update='yes') COPY $source_file $destfile /h $updateinfo=$updateinfo+' +'+Lcase($kixfil[$i]) ELSE $updateinfo=$updateinfo+' ='+Lcase($kixfil[$i]) ENDIF IF (@error<>0) ? 'Warning INSTALL: error '+@error+' ('+@serror+')' ENDIF $i=$i+1 IF ($ntmode='yes') AND ($reqd='yes') $i=$maxfile+1 ENDIF LOOP IF ($ntmode='yes') AND ($reqd='yes') $i=2 ; - remove DLL's - WHILE ($i <= $maxfile) $destfile=$destdir+$kixfil[$i] IF (Exist($destfile)=1) IF (SetFileAttr($destfile, 128)<>0) ENDIF DEL $destfile $updateinfo=$updateinfo+' -'+Lcase($kixfil[$i]) ELSE $updateinfo=$updateinfo+' ?'+Lcase($kixfil[$i]) ENDIF $i=$i+1 LOOP ENDIF $updateok='yes' ; - all kixtart files must be available at $destdir - $i=1 WHILE ($i <= $maxfile) $destfile=$destdir+$kixfil[$i] IF (Exist($destfile)<>1) $updateok='no' $updateinfo=$updateinfo+' unknown_file.'+Lcase($kixfil[$i]) IF WriteProfileString($systemdrive+$kixfil[0],'KiXtart',Lcase($kixfil[$i]),@date+' '+@time+' -> unknown file') ENDIF IF WriteProfileString($destdir+$kixfil[0],'KiXtart',Lcase($kixfil[$i]),@date+' '+@time+' -> unknown file') ENDIF ELSE $buildinfo=GetFileVersion($destfile,'specialbuild') IF (Len($buildinfo)<>0) $buildinfo=' ('+Lcase($buildinfo)+')' ELSE $buildinfo='' ENDIF $inistring=$kixfil[0],'KiXtart',Lcase($kixfil[$i]),@date+' '+@time+' -> ' $inistring=$inistring+GetFileTime($destfile)+' '+GetFileSize($destfile)+$buildinfo $rc=WriteProfileString($systemdrive+$inistring) $rc=WriteProfileString($destdir+$inistring) ENDIF $i=$i+1 IF ($ntmode='yes') AND ($reqd='yes') $i=$maxfile+1 ENDIF LOOP $i=$maxfile IF ($updateok='yes') $updateinfo='('+Ltrim(Rtrim(Lcase($updateinfo)))+') to '+'"'+Ltrim(Rtrim(Lcase($destdir)))+'"' $rc=WriteProfileString($systemdrive+$kixfil[0],'KiXtart','KiXtart','installation completed at '+@date+' '+@time+' '+$updateinfo) $rc=WriteProfileString($destdir+$kixfil[0],'KiXtart', 'KiXtart','installation completed at '+@date+' '+@time+' '+$updateinfo) ELSE $updateinfo='('+Ltrim(Rtrim(Lcase($updateinfo)))+') to '+'"'+Ltrim(Rtrim(Lcase($destdir)))+'"' $rc=WriteProfileString($systemdrive+$kixfil[0],'KiXtart','KiXtart','installation incompleted at '+@date+' '+@time+' '+$updateinfo) $rc=WriteProfileString($destdir+$kixfil[0],'KiXtart','KiXtart','installation incompleted at '+@date+' '+@time+' '+$updateinfo) ENDIF IF ($updateok<>'yes') IF (Exist($systemdrive+$kixfil[0])=1) DEL $systemdrive+$kixfil[0] ; - kixtart version is incompleted - ENDIF IF (Exist($destdir+$kixfil[0])=1) $destdir+$kixfil[0] ; - kixtart version is incompleted - ENDIF ENDIF $rc=WriteProfileString($systemdrive+$kixfil[0],'KiXtart','KiXtart release',$os+' -> kix '+@kix) $rc=WriteProfileString($destdir+$kixfil[0],'KiXtart','KiXtart release', $os+' -> kix '+@kix) IF ($reqd='yes') $message='(only required files)' ELSE $message='' ENDIF $rc=WriteProfileString($systemdrive+$kixfil[0], 'KiXtart', 'KiXtart mode', 'update'+$message) $rc=WriteProfileString($destdir+$kixfil[0], 'KiXtart', 'KiXtart mode', 'update'+$message) ; - end - :end_script $timestop=@time IF ($update='yes') $loginfo='Kixtart-UPDATE '+$prgrm_version+' script completed successfully' $loginfo=$loginfo+' ('+$timestart+' - '+$timestop+') '+Ltrim(Rtrim($updateinfo)) IF ($consmode='yes') $loginfo=$loginfo+' (CONSOLE-LESS)' ENDIF IF ($updateok='yes') IF LogEvent(0, 1, $loginfo, '', 'Kixtart UPDATE @kix'+'c') ENDIF ELSE IF LogEvent(0, 1, $loginfo, '', 'Kixtart UPDATE @kix'+'e') ENDIF ENDIF ENDIF IF ($updateok='yes') $updateok='' ELSE $updateok='in' ENDIF IF ($consmode='yes') ? 'Kixtart '+@kix+' (console-less) update '+$updateok+'completed. ('+$sourcedir+' -> '+$destdir+')' ELSE ? 'Kixtart '+@kix+' update '+$updateok+'completed. (''+$sourcedir+'' -> ''+$destdir+'')' ENDIF IF (RedirectOutput('CON')=0) ENDIF IF ($consmode='yes') ? 'Kixtart '+@kix+' (console-less) update '+$updateok+'completed. ('+$sourcedir+' -> '+$destdir+')' ELSE ? 'Kixtart '+@kix+' update '+$updateok+'completed. ('+$sourcedir+' -> '+$destdir+')' ENDIF ? :end IF ($show_mode='yes') $title='KiXtart '+@kix+' (CONSOLE-LESS version)' $message='' $filstring='kix'+Substr(@kix,1,1)+Substr(@kix,3,2)+'w.ok' IF ($first_installation='yes') IF Exist($systemdrive+$filstring) OR Exist($destdir+$filstring) $message='Installation of KiXtart '+@kix+' completed' ELSE $message='Installation of KiXtart '+@kix+' incompleted' ENDIF ELSE IF Exist($systemdrive+$filstring) OR Exist($destdir+$filstring') $message='Installation of KiXtart '+@kix+' completed' ELSE $message='Installation of KiXtart '+@kix+' incompleted' ENDIF ENDIF ENDIF BREAK ON FLUSHKB IF Exist($systemdrive+$filstring) OR Exist($destdir+$filstring) EXIT(0) ELSE EXIT(1) ENDIF
I am not using the WSTART2.KIX, but am using the DUMMY.KIX as previously discussed.
Some comments and design philosphies:
- I like this method of KiXtart deployment and want to trim this down to only the necessary components.
- Other methodologies have been talked about, i.e. WinRAR, but licensing may pose issues. I think WinZIP offers similar deployment methods.
- Only copy KIX32.EXE on NT-Based machines
- "Marker File" KIX420W.OK is great - you can check the results and also use it for NTLOGON.BAT
- I still believe we can trim more out of the code and achieve the same results.
Kent [ 26. February 2003, 08:49: Message edited by: kdyer ]
|