Seite 1 von 1

Admin-Skript Probleme

Verfasst: 11 Apr 2014, 13:54
von proland
Guten Tag lieber Support und liebe Community,

Ich bin gerade am Skript für Manictime gesessen. Nun will dieses Programm aber eine .NET Framework Version mit installieren. Das mag wiederum das Windows nicht... Denn das kann man nur mit Administrationsrechten installieren.

Nachdem ich die winst.exe zum testen benutzt hatte und eigtl alles funktioniert hat war ich sehr zufrieden. Bis ich ManicTime dann vom opsi aus installieren wollte.
Es ging nicht. Und der Error kam nach sehr langer TimeOut-Phase dann beim ManicTime. Es konnte nicht installiert werden, da .NET ... fehlt. Jetzt ist mir aufgefallen, ich hatte die winst.exe als Administrator ausgeführt. Deshalb gab es da keine Probleme...
Naja aufjedenfall ging's dann weiter. Ich habe den "inst. als Admin ausführen"-Absatz im Handbuch gefunden. Das Skript genommen und angepasst.
Als ich es dann ausprobieren wollte hat er auch schön den Adminaccount angelegt, hat das setup.ins angefangen zu installieren, ist aber dann wie voher auch ewig (und damit meine ich locker 3 Stunden) an der .NET Installation hängen geblieben.

setup_admin.ins - Skript

Code: Alles auswählen

[Actions]
requiredWinstVersion >= 4.11.3.3
setLogLevel=7
DefVar $ProductName$
DefVar $ProductSizeMB$
DefVar $LocalSetupScript$
DefVar $LockKeyboard$
DefVar $OpsiAdminPass$
DefVar $RebootFlag$
DefVar $WinstRegKey$
DefVar $AutoName$
DefVar $AutoPass$
DefVar $AutoDom$
DefVar $AutoLogon$
DefVar $AutoBackupKey$
DefVar $LocalFilesPath$
DefVar $LocalWinst$
DefVar $DefaultLoglevel$
DefVar $PasswdLogLevel$
DefVar $AdminGroup$
DefVar $SearchResult$
DefVar $LocalDomain$
DefVar $debug$
DefVar $isFatal$

Set $ProductName$ = "ManicTime"
Set $ProductSizeMB$ = "100"
Set $LocalSetupScript$ = "setup.ins"

     comment "get and set initial values..."
set $debug$ = GetProductProperty("debug","false")
set $isFatal$ = "false"
set $DefaultLoglevel$ = "7"
SetLogLevel=$DefaultLoglevel$
Set $LocalDomain$ = "%PCNAME%"
    comment "check if we productive or debugging..."
  if $debug$ = "true"
    comment "we are in debug mode"
    set $LockKeyboard$="false"
    Set $PasswdLogLevel$="7"
  else
    comment "we are in productive mode"
    comment "set $LockKeyboard$ to true to prevent user hacks while admin is logged in"
    Set $LockKeyboard$="true"
    comment " set $PasswdLogLevel$ to 0 for production"
    Set $PasswdLogLevel$="0"
  endif
    comment "handle Rebootflag"
    Set $WinstRegKey$ = "HKLM\SOFTWARE\opsi.org\winst"
    Set $RebootFlag$ = GetRegistryStringValue32("["+$WinstRegKey$+"] "+"RebootFlag")
        
    comment "some paths required"
    Set $AutoBackupKey$ = $WinstRegKey$+"\AutoLogonBackup"
    Set $LocalFilesPath$ = "C:\opsi.org\tmp\opsi_local_inst"
    Set $LocalWinst$ = "%ProgramFilesDir%\opsi.org\opsi-client-agent\opsi-winst\winst32.exe"
  if not( FileExists($LocalWinst$) )
	LogError "No opsi-winst found. Abborting."
	isFatalError
  endif
    
    comment "show product picture"
    ShowBitmap "%scriptpath%\localsetup\"+$ProductName$+".jpg" $ProductName$

  if not (($RebootFlag$ = "1") or ($RebootFlag$ = "2") or ($RebootFlag$ = "3"))
	comment "Part before first Reboot"
	comment "just reboot - this must be done if this is the first product after OS installation"
	comment "handle Rebootflag"
	Set $RebootFlag$ = "1"
	Registry_SaveRebootFlag /32bit
	;ExitWindows /ImmediateReboot
  endif ; Rebootflag = not (1 or 2 or 3)

  if $RebootFlag$ = "1"
	comment "Part before second Reboot"
	setActionProgress "Preparing"

	if not(HasMinimumSpace ("%SYSTEMDRIVE%", ""+$ProductSizeMB$+" MB"))
	    LogError "Not enough space on drive C: . "+$ProductSizeMB$+" MB on C: required
	for "+$ProductName$
	    isFatalError
	endif
	
	
    comment "Lets work..."
    Message "Preparing "+$ProductName$+" install step 1..."
    sub_Prepare_AutoLogon

    
    comment "we need to reboot now to be sure that the autologon work"
    comment "handle Rebootflag"
    Set $RebootFlag$ = "2"
    Registry_SaveRebootFlag /32bit
    ExitWindows /ImmediateReboot
  endif ; Rebootflag = not (1 or 2)
    
    

  if ($RebootFlag$ = "2")
    comment "Part after first Reboot"
    
    comment "handle Rebootflag"
    Set $RebootFlag$ = "3"
    Registry_SaveRebootFlag /32bit
    
    comment "Lets work..."
    Message "Preparing "+$ProductName$+" install step 2..."
    Registry_enable_keyboard /sysnative
    
    comment "now let the autologon work"
    comment "it will stop with a reboot"
    setActionProgress "Run Installation"
    
    ExitWindows /ImmediateLogout
    endif ; Rebootflag = 2
    
    
  if ($RebootFlag$ = "3")
    comment "Part after second Reboot"
    ExitWindows /Reboot
    setActionProgress "Cleanup"
    comment "handle Rebootflag"
    Set $RebootFlag$ = "0"
    Registry_SaveRebootFlag /32bit
    
    comment "Lets work..."
    Message "Cleanup "+$ProductName$+" install (step 3)..."
    sub_Restore_AutoLogon
    set $SearchResult$ = GetRegistryStringValueSysnative("[HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce] opsi_autologon_setup")
    
      if $SearchResult$ = $LocalWinst$+" "+$LocalFilesPath$+"\"+$LocalSetupScript$+" /batch /productid %installingProdName%"
	LogError "Localscript did not run. We remove the RunOnce entry and abort"
	Registry_del_runonce /sysnative
	set $isFatal$ = "true"
      endif
      
      if "true" = getRegistryStringValue32("[HKLM\Software\opsi.org\winst] with-admin-fatal")
	LogError "set to fatal because the local script stored this result"
	set $isFatal$ = "true"
      endif
    comment "cleanup the registry key which stores a fatal result of the local script"
    Registry_clean_fatal_flag /32bit
    
      if $isFatal$ = "true"
	isFatalError
      endif
      
    comment "This is the clean end of the installation"
  endif ; Rebootflag = 3


[sub_Prepare_AutoLogon]
comment "copy the setup script and files"
Files_copy_Setup_files_local
comment "read actual Autologon values for backup"
set $AutoName$ = GetRegistryStringValueSysnative("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] DefaultUserName")
comment "if AutoLogonName is our setup admin user, something bad happend"
comment "then let us cleanup"

  if ($AutoName$="opsiSetupAdmin")
    set $AutoName$=""
    set $AutoPass$=""
    set $AutoDom$=""
    set $AutoLogon$="0"
  else
    set $AutoPass$ = GetRegistryStringValueSysnative("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] DefaultPassword")
    set $AutoDom$ = GetRegistryStringValueSysnative("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] DefaultDomainName")
    set $AutoLogon$ = GetRegistryStringValueSysnative("[HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] AutoAdminLogon")
  endif
  
    comment "backup AutoLogon values"
    Registry_save_autologon /32bit
    
    comment "prepare the admin AutoLogon"
    SetLogLevel=$PasswdLogLevel$
    set $OpsiAdminPass$= randomstr
    Registry_autologon /sysnative
    comment "get the name of the admin group"
    set $AdminGroup$ = SidToName("S-1-5-32-544")
    comment "create our setup admin user"
    DosInAnIcon_makeadmin
    SetLogLevel=$DefaultLoglevel$
    
    comment "store our setup script as run once"
    Registry_runOnce /sysnative
    
    comment "disable keyboard and mouse while the autologin admin works"
    
  if ($LockKeyboard$="true")
    Registry_disable_keyboard /Sysnative
  endif
  
    comment "cleanup the registry key which stores a fatal result of the local script"
    Registry_clean_fatal_flag /32bit
    
    
[sub_Restore_AutoLogon]
comment "read AutoLogon values from backup"
set $AutoName$ = GetRegistryStringValue("["+$AutoBackupKey$+"] DefaultUserName")
set $AutoPass$ = GetRegistryStringValue("["+$AutoBackupKey$+"] DefaultPassword")
set $AutoDom$ = GetRegistryStringValue("["+$AutoBackupKey$+"] DefaultDomainName")
set $AutoLogon$ = GetRegistryStringValue("["+$AutoBackupKey$+"] AutoAdminLogon")

comment "restore the values"
SetLogLevel = $PasswdLogLevel$
Registry_restore_autologon /Sysnative
SetLogLevel = $DefaultLoglevel$
comment "delete our setup admin user"
DosInAnIcon_deleteadmin
comment "cleanup setup script, files and profiledir"
Files_delete_Setup_files_local
comment "delete profiledir"
DosInAnIcon_deleteprofile


[Registry_save_autologon]
openkey [$AutoBackupKey$]
set "DefaultUserName"="$AutoName$"
set "DefaultPassword"="$AutoPass$"
set "DefaultDomainName"="$AutoDom$"
set "AutoAdminLogon"="$AutoLogon$"


[Registry_restore_autologon]
openkey [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
set "DefaultUserName"="$AutoName$"
set "DefaultPassword"="$AutoPass$"
set "DefaultDomainName"="$AutoDom$"
set "AutoAdminLogon"="$AutoLogon$"


[DosInAnIcon_deleteadmin]
NET USER opsiSetupAdmin /DELETE


[Registry_SaveRebootFlag]
openKey [$WinstRegKey$]
set "RebootFlag" = "$RebootFlag$"


[Files_copy_Setup_files_local]
copy -s %ScriptPath%\localsetup\*.* $LocalFilesPath$


[Files_delete_Setup_files_local]
del -sf $LocalFilesPath$\
; folgender Befehl funktioniert nicht vollständig, deshalb ist er zur Zeit auskommentier
; der Befehl wird durch die Sektion "DosInAnIcon_deleteprofile" ersetzt (P.Ohler)
;delete -sf "%ProfileDir%\opsiSetupAdmin"
[DosInAnIcon_deleteprofile]
rmdir /S /Q "%ProfileDir%\opsiSetupAdmin"


[DosInAnIcon_makeadmin]
NET USER opsiSetupAdmin $OpsiAdminPass$ /ADD
NET LOCALGROUP $AdminGroup$ /ADD opsiSetupAdmin


[Registry_autologon]
openkey [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
set "DefaultUserName"="opsiSetupAdmin"
set "DefaultPassword"="$OpsiAdminPass$"
set "DefaultDomainName"="$LocalDomain$"
set "AutoAdminLogon"="1"


[Registry_runonce]
openkey [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
set "opsi_autologon_setup"=’"$LocalWinst$" "$LocalFilesPath$\$LocalSetupScript$" /batch /
productid %installingProdName%’


[Registry_del_runonce]
openkey [HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce]
DeleteVar "opsi_autologon_setup"


[Registry_disable_keyboard]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kbdclass]
set "Start"=REG_DWORD:0x4
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mouclass]
set "Start"=REG_DWORD:0x4


[Registry_enable_keyboard]
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Kbdclass]
set "Start"=REG_DWORD:0x1
openkey [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Mouclass]
set "Start"=REG_DWORD:0x1


[Registry_clean_fatal_flag]
openkey [$WinstRegKey$]
DeleteVar "with-admin-fatal"

setup.ins - Skript

Code: Alles auswählen

[Initial]
Message=Installation von ManicTime
SetLogLevel=8
ExitOnError=false
ScriptErrorMessages=true
TraceMode=off

[Aktionen]
DefVar $systemroot$
DefVar $system$
DefVar $scriptpath$
DefVar $programfilesdir$
Set $systemroot$="%Systemroot%"
Set $system$="%System%"
Set $scriptpath$="%scriptpath%"
Set $programfilesdir$="%ProgramFilesDir%"

comment "Show product picture"
ShowBitmap /3 "%ScriptPath%\" + "manictime.jpg" "ManicTime"
if not (HasMinimumSpace("%Systemdrive%","100MB"))


        LogError "Nicht genügend Platz auf C:"
else
	Message ".NET 4.0 Client Profile wird installiert."
	WinBatch_install_NET
	
	Message "ManicTime wird installiert."
	WinBatch_install
	
endif

[WinBatch_install_NET]
%scriptpath%\localsetup\dotnet40.exe /q 


[WinBatch_install]
msiexec /i %scriptpath%\localsetup\manictime.msi /quiet ALLUSERS=2 /L*v "%Systemdrive%\tmp\manictime_install_log.txt" 
die Aufrufparameter stimmen soweit bei der setup.ins...
Das Problem ist hauptsächlich, dass er die Installation als opsiAutoAdmin oder so nicht richtig beendet bzw durchführt. Außerdem wird natürlich das restliche Skript --> Admin wieder entfernen und so nicht mehr ausgeführt...

Liebe Grüße und schonmal Danke für's Gedanken machen :)
Proland

Re: Admin-Skript Probleme

Verfasst: 23 Apr 2014, 13:01
von ueluekmen
Hi,

hast du dir den Eintrag im WIKI zu dotnet mal angeschaut?

wiki/userspace:netfx_4.0