MCA,

No need for "TO DO." As I have already done it!
I have put the code on a bit of a diet. [Wink]

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 ]
_________________________
Utilize these resources:
UDFs (Full List)
KiXtart FAQ & How to's