2017-02-08 2 views
2

UPDATE nicht ausführen: Jeder, der Schwierigkeiten hat, ein NSI-Installationsprogramm zu verwenden, um eine INF-Datei zu installieren, suchen nicht weiter. Das funktioniert tatsächlich.NSIS Treiber-Installer Batch-Datei

Ich habe eine Batchdatei erstellt, die erfolgreich einen Gerätetreiber im Administratormodus installiert. Wenn ich dies zusammen mit dem Treiber nach C: \ Benutzer \ Me \ AppData \ Local \ Temp \ Driver kopiere, kann der Treiber erfolgreich ausgeführt und installiert werden.

Wenn ich jedoch versuche, diese genaue Batch-Datei von einem NSIS-Installationsprogramm aufzurufen, das ExecWait verwendet, wird die Batch-Datei nicht ausgeführt. Die Dateien werden in den exakten Speicherort wie oben erwähnt übertragen.

Wie in aller Welt rufen Sie erfolgreich eine Batchdatei aus einer NSIS-Datei auf?

Relevant Schnipsel aus NSIS:

# Installer sections 
Section -Main SEC0000 

    # Copy viewer software to PC 
    SetOverwrite on 

     #(software stuff) ... 

    # Copy USB slave driver to PC 
    SetOutPath $TEMP\Driver 
    File ..\Driver\c500.cat 
    File ..\Driver\c500.inf 
    File ..\Driver\runme.bat 
    File ..\Driver\install.bat 

    # Remove the Windows 7/8/10 magic relocated ini file (if it exists) 
    Delete /REBOOTOK "$LOCALAPPDATA\VirtualStore\Program Files (x86)\CompanyName\C500-510\C500_510.ini" 

    WriteRegStr HKLM "${REGKEY}\Components" Main 1 
SectionEnd 

# Install C500 USB slave driver 
Section -InstallDriver SEC0001 
    SetOverwrite on 
    DetailPrint "Install C500 USB slave driver" 

    # Install USB slave driver if desired 
    ${If} ${Cmd} `MessageBox MB_YESNO|MB_ICONQUESTION "Install C500 USB slave driver?" IDYES` 
     ExecWait "$TEMP\Driver\runme.cmd" 
    ${EndIf} 

    WriteRegStr HKLM "${REGKEY}\Components" InstallDriver 1 
SectionEnd 

install.bat

set fn=%~dp0c500.inf 
echo fn is %fn% 
::cd %windir% && %windir%\system32\pnputil.exe -i -a %~dp0\c500.inf 
cd %windir% 
echo %cd% 
pnputil -i -a %fn% 
if %errorlevel% == 0 goto success 
echo Device installation failed. 
echo Try to run install.bat as Administrator 
echo Or check if your system has the usbser.sys file 
goto end 
:success 
echo Device installation completed. 
:end 
pause 

runme.bat

@echo off 

powershell -Command "Start-Process 'install.bat' -ArgumentList '%~dp0\c500.inf' -Verb runAs" 

U pdate: Wenn ich ".cmd" in der NSIS-Datei zu ".bat" ändere, bekomme ich cmd Windows mit den folgenden Fehlern.

enter image description here

+1

Dies könnte eine lange gedreht, aber es einen Versuch nur für den Fall geben ... Also für die 'runme.bat' Skript benutze das . . . ** '1.' ** füge' SET PowerShellDir = C: \ Windows \ System32 \ WindowsPowerShell \ v1.0' in einer Zeile hinzu, ** '2.' ** füge dann' CD/D "% PowerShellDir%" 'hinzu in der Zeile darunter, und dann schließlich in der Zeile darunter ** ** "3." ** "Powershell-ExecutionPolicy Bypass-Befehl" & Start-Prozess 'install.bat' -ArgumentList '% ~ dp0 \ c500.inf "" Statt dessen, was du hast, benutze das stattdessen. Lass mich wissen, wie das Testen für dich läuft und ob das hilft und ich werde eine Antwort hinzufügen, wenn das so ist und du willst, dass ich es tue. –

+0

Kein Glück. Denken Sie daran, dass ich keine Probleme habe, wenn ich runme.bat direkt ausführe. Ich glaube wirklich, dass das Problem in der NSIS-Datei liegt. Ich habe so viele Möglichkeiten ausprobiert, um die runme.bat-Datei aufzurufen, aber es öffnet nie das Befehlsfenster und vervollständigt das Installationsprogramm, als ob es gut funktioniert hätte. –

+0

Kann die Tatsache, dass ich die runme.bat-Datei von AppData/Temp ausführen kann, nicht beweisen, dass dies in Ordnung ist? Ich kann die .bat-Datei nicht direkt von ProgramFiles ausführen, aber ich kann von hier aus. Übrigens werde ich jetzt die Frage detaillierter hinzufügen. Leider habe ich versucht und $ DESKTOP hat nicht geholfen. –

Antwort

1

pnputil.exe existiert nur in der 64-bit system32 folder.

Sie können das Dateisystem Umleitung auf 32-Bit-Anwendungen angewendet deaktivieren:

RequestExecutionLevel Admin 

!include x64.nsh 

Section 
${DisableX64FSRedirection} 
nsExec::ExecToLog '"$WINDIR\system32\PnPutil.exe" -i -a "$TEMP\Driver\c500.inf"' 
Pop $0 
${EnableX64FSRedirection} 
DetailPrint $0 
SectionEnd 
+0

Mein Testgerät ist 64 Bit win10 –

+0

Sie können versuchen, die Batchdatei mit nsExec auszuführen. – Anders

+0

Ihr Vorschlag arbeitete in Windows 10. Nach allem, was ich versucht habe, bin ich schockiert. –