Hardware abhängige Installation vom Nvidia Treiber

Antworten
Maidt
Beiträge: 2
Registriert: 01 Sep 2022, 09:46

Hardware abhängige Installation vom Nvidia Treiber

Beitrag von Maidt »

Moin allerseits,

ich versuche gerade ein Script zu schreiben. Welches nur bei einer bestimmten Grafikkarte eine Installation ausführt. Leider finde ich bis jetzt nicht das Richtige. Das Script installiert und deinstalliert die Treiber der Karte und ich kann im Registryschlüssel die Karte auslesen. Hab ich aber mehr als ein Eintrag, kann ich nicht die anderen Einträge auslesen lassen.

Damit klappt die Abfrage und Installation. Aber nur wenn "0001" vorgebe.

Code: Alles auswählen

; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org    https://uib.de
; This code was originally created by opsi-setup-detector 4.2.0.10
; ----------------------------------------------------------------
encoding=utf8

[Actions]
requiredOpsiscriptVersion >= "4.12.4.23"

importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"


; All variables are defined here:
include_insert "define_vars_multi.opsiscript"

; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a seperator
Set $ProductId$		= "nvidia"
; the path where we find the product after the installation
Set $InstallDir$	= "unknown"
Set $LicenseRequired$ = "False"
Set $LicensePool$	  = "" 
Set $MinimumSpace$	 = "10240 MB"
; ----------------------------------------------------------------

set $OS$ = GetOS

if not(($OS$ = "Windows_NT"))
	logError "Installation aborted: wrong OS version: only Windows"
	isFatalError "wrong OS"
endif

if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
	LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
	isFatalError "No Space"
	; Stop process and set installation status to failed
endif

Set $GraphicCard$ = getRegistryKeyListSysnative("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}")
set $RegistryKey$ = "[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4d36e968-e325-11ce-bfc1-08002be10318}\" + "0001" + "]"
Set $Cardname$ = GetRegistryStringValueSysNative($RegistryKey$ + "DriverDesc")

if not(($Cardname$ = "NVIDIA Quadro P400"))
	logError "Installation aborted: wrong Graphic Card: only NVIDIA Quadro P400"
	isFatalError "wrong Graphic Card"
endif


comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$



if FileExists("%ScriptPath%\delsub.opsiscript")
	comment "Start uninstall sub section"
	Sub "%ScriptPath%\delsub.opsiscript"
endif

Message "Installing " + $ProductId$ + " ..."

if $LicenseRequired$ = "true"
	comment "Licensing required, reserve license and get license key"
	set $LicenseKey$ = get_licensekey_byPoolOrKey($LicensePool$)
endif


comment "Start setup program"
ChangeDirectory "%SCRIPTPATH%\files1"
;----------------------------------------------
;Winbatch_install
DosBatch_install
;----------------------------------------------
set $ExitCode$ = getlastexitcode
if "true" = isMsExitcodeFatal_short($exitcode$, "true", $ErrorString$ )
	
	LogError $ErrorString$
	isfatalerror $ErrorString$
else
	Comment $ErrorString$
endif


;[Winbatch_install]
;"%scriptpath%\files1\setup.exe"  /clean /n /noeula /passive

[DosBatch_install]
"%ScriptPath%\install.bat"
Sind mehrere Einträge vorhanden oder die Karte in einen anderen Eintrag, geht das natürlich nicht mehr. Es sollen aber alle Einträge abgefragt werden, ob die gewünschte Karte vorhanden ist.

Meine Frage daher: 1. Wie kann ich opsi sagen, er soll alle Einträge abfragen?
2. Und wenn die Karte gefunden, wurde er den Treiber installiert?



Vielen Dank und liebe Grüße
Maik
Jan.Schmidt
Beiträge: 439
Registriert: 08 Jul 2017, 12:02

Re: Hardware abhängige Installation vom Nvidia Treiber

Beitrag von Jan.Schmidt »

Maidt hat geschrieben: 01 Sep 2022, 12:14 Moin allerseits,

ich versuche gerade ein Script zu schreiben. Welches nur bei einer bestimmten Grafikkarte eine Installation ausführt. Leider finde ich bis jetzt nicht das Richtige. Das Script installiert und deinstalliert die Treiber der Karte und ich kann im Registryschlüssel die Karte auslesen. Hab ich aber mehr als ein Eintrag, kann ich nicht die anderen Einträge auslesen lassen.

Damit klappt die Abfrage und Installation. Aber nur wenn "0001" vorgebe.

Code: Alles auswählen

; ----------------------------------------------------------------

[DosBatch_install]
"%ScriptPath%\install.bat"


Sind mehrere Einträge vorhanden oder die Karte in einen anderen Eintrag, geht das natürlich nicht mehr. Es sollen aber alle Einträge abgefragt werden, ob die gewünschte Karte vorhanden ist.

Meine Frage daher: 1. Wie kann ich opsi sagen, er soll alle Einträge abfragen?
2. Und wenn die Karte gefunden, wurde er den Treiber installiert?
Hi,

keine Ahnung, wie dein install.bat aussieht - aber ich würde das in der cmd NICHT BAT (bat ist veraltet und sollte nicht mehr wirklich genutzt werden)! so lösen:

Code: Alles auswählen

wmic path win32_VideoController get name|findstr /c:"NVIDIA Quadro P400" && goto install
:badguy
exit /b 99
:install
do something >logfile.txt
und dann entweder prüfen, ob es das log gibt oder das nach erfolgreich auslesen und ansonsten fatalerror whatever zurückgeben.
Maidt
Beiträge: 2
Registriert: 01 Sep 2022, 09:46

Re: Hardware abhängige Installation vom Nvidia Treiber

Beitrag von Maidt »

Moin,

danke für die Antwort. Die .bat sieht so aus und startet nur die Installation bzw. die Deinstallation. Leider war es mir aufgrund der setup.exe nicht möglich, die Switche so zusetzen, dass ein automatischer Neustart im silent Modus gestartet wurde. Außerdem musste ich die setup.exe und die setup.cfg umbenennen, damit ich überhaupt installieren und deinstallieren konnte. Deswegen wurden die .bat geschrieben.

install.bat

Code: Alles auswählen

@Echo Off

Echo installiere Nvidia Display.Driver
start /wait /max p:\nvidia\files1\setup.exe /install /passive /clean /noeula
Echo Rechner Neustart
shutdown /r /f /t 10
exit
uninstall.bat

Code: Alles auswählen

@Echo Off

Echo deinstalliere Nvidia Display.Driver
start /wait /max p:\nvidia\files1\uninstall.exe -uninstall Display.Driver -s
Echo Rechner Neustart
shutdown /r /f /t 10
exit


MfG
Maik
Jan.Schmidt
Beiträge: 439
Registriert: 08 Jul 2017, 12:02

Re: Hardware abhängige Installation vom Nvidia Treiber

Beitrag von Jan.Schmidt »

nimm "einfach" meinen Ansatz, und aus do something machst du deine.
lösch die (wenn vorhanden) logfile datei, schreibt dein echo zeugs da rein und prüfe danach, ob das logfile existiert oder frag (keine Ahnung ob das so geht) ab ob der Treiber in der Registry angekommen ist (manche brauchen einen Neustart, um das zu machen) um den Erfolg zu überprüfen.
Oder nimm devcon (nicht mehr onboardmittel seit Windows 7 - musste nun bei M$ besorgen) um die Installation mit Erfolg oder misserfolg schliessen zu können.

in deinem script läuft nix "aktuelles" - da passt die suffix bat noch, aber wie oben geschrieben - nimm cmd das ist seit ~20 Jahren der standard für sowas.
Und dann funktionieren auch for schleifen if abfragen und das ganze (seit 20 Jahren genutzte) Zeugs das Windoof kann so wie es die Hilfe anbietet.
Antworten