Seite 1 von 2
[GELÖST] Die Syntax für den Dateinamen... ist falsch
Veröffentlicht: 25. September 2018 – 15:38 Uhr
von Empbilly
Hallo,
Ich habe ein Paket zur Installation der Surfer 11-Software erstellt. In diesem Paket habe ich auch die Option programmiert, alte Versionen vor der Installation der neuen Version zu deinstallieren.
Nach der Ausführung auf dem Client zeigt die Befehlsausgabe den folgenden Fehler an:
Code: Alle auswählen
Uninstalling old versions of surfer...
CalledProcessErrorOutput: Command [u'"C:\\ProgramData\\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE'] returned non-zero exit status 1.
The syntax for the file name, directory name, or volume label is incorrect.
Paket:
Code: Alle auswählen
# -*- coding: utf-8 -*-
from setuphelpers import *
import os
uninstallkey = []
destdir = makepath(programfiles, "Golden Software", "Surfer 11", "AppData")
filedir = "%s\\Gradient.ini" % destdir
def install():
print('Uninstalling old versions of surfer...')
for soft in installed_softwares('Surfer'):
try:
run(WAPT.uninstall_cmd(soft['key']))
except ValueError:
print('An error occured on Surfer unninstalling!')
print('Uninstalling old versions of Surfer completed!')
print('installing Surfer')
install_msi_if_needed('surfer.msi')
if os.path.exists(destdir):
filecopyto("Gradient.ini", destdir)
if os.path.exists(filedir):
print("Gradient.ini copiado para %s" % destdir)
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 25. September 2018 – 15:46 Uhr
von htouvet
Hallo,
Es sieht so aus, als ob uninstall_cmd eine Liste zurückgibt, die nicht korrekt aufgeteilt ist.
Der Befehl `run` kann entweder eine Liste oder einen String als erstes Argument entgegennehmen. Im Falle einer Liste muss das erste Element die ausführbare Datei sein, die folgenden Elemente sind die Argumente des Befehls.
Wenn Sie also [u'"C:\\ProgramData\\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE'] als Rückgabewert von uninstall_cmd erhalten (d. h. eine Liste mit nur einem Element), besteht eine mögliche Lösung darin, das erste Argument als cmd zu verwenden
Code: Alle auswählen
# -*- coding: utf-8 -*-
from setuphelpers import *
import os
uninstallkey = []
destdir = makepath(programfiles, "Golden Software", "Surfer 11", "AppData")
filedir = "%s\\Gradient.ini" % destdir
def install():
print('Uninstalling old versions of surfer...')
for soft in installed_softwares('Surfer'):
try:
cmd = WAPT.uninstall_cmd(soft['key'])
if isinstance(cmd,list) and len(cmd) == 1:
cmd = cmd[0]
run(cmd)
except ValueError:
print('An error occured on Surfer unninstalling!')
print('Uninstalling old versions of Surfer completed!')
print('installing Surfer')
install_msi_if_needed('surfer.msi')
if os.path.exists(destdir):
filecopyto("Gradient.ini", destdir)
if os.path.exists(filedir):
print("Gradient.ini copiado para %s" % destdir)
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 25. September 2018 – 17:05 Uhr
von Empbilly
Hallo htouvet, danke für die Antwort!!!
Ich habe die Änderung vorgenommen, aber es ist ein Timeout-Fehler aufgetreten.
Ich habe einen Test an der Hand mit dem unten stehenden Befehl durchgeführt und ihn stillschweigend entfernt.
Code: Alle auswählen
C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE SILENT=TRUE MODIFY=FALSE
Wie kann ich die Option SILENT=TRUE als Argument übergeben?
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 25. September 2018 – 17:18 Uhr
von htouvet
Füge es einfach dem Befehl hinzu...
Code: Alle auswählen
# -*- coding: utf-8 -*-
from setuphelpers import *
import os
uninstallkey = []
destdir = makepath(programfiles, "Golden Software", "Surfer 11", "AppData")
filedir = "%s\\Gradient.ini" % destdir
def install():
print('Uninstalling old versions of surfer...')
for soft in installed_softwares('Surfer'):
try:
cmd = WAPT.uninstall_cmd(soft['key'])
if isinstance(cmd,list) and len(cmd) == 1:
cmd = cmd[0]
if not 'SILENT=TRUE' in cmd:
cmd = cmd + ' SILENT=TRUE'
run(cmd)
except ValueError:
print('An error occured on Surfer unninstalling!')
print('Uninstalling old versions of Surfer completed!')
print('installing Surfer')
install_msi_if_needed('surfer.msi')
if os.path.exists(destdir):
filecopyto("Gradient.ini", destdir)
if os.path.exists(filedir):
print("Gradient.ini copiado para %s" % destdir)
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 25. September 2018 – 17:51 Uhr
von Empbilly
Cool!!
Wenn ich den Befehl jedoch manuell über die Eingabeaufforderung ausführe:
Code: Alle auswählen
C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE
wird sehr schnell entfernt.
Beim Ausführen des Skripts tritt ein Timeout-Fehler auf. Ich habe testweise ein Timeout von 180 Sekunden konfiguriert.
Code: Alle auswählen
Uninstalling old versions of surfer...
TimeoutExpired: Command '"C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE' timed out after 180 seconds with output ''''
Stimmt etwas mit meinem Skript nicht?
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 26. September 2018 – 13:05 Uhr
von dcardon
Hallo Elias,
embilly schrieb: ↑25. September 2018 - 17:51 Uhr
Wenn ich den Befehl jedoch manuell über die Eingabeaufforderung ausführe:
Code: Alle auswählen
C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}>"Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE
wird sehr schnell entfernt.
Beim Ausführen des Skripts tritt ein Timeout-Fehler auf. Ich habe testweise ein Timeout von 180 Sekunden konfiguriert.
Code: Alle auswählen
Uninstalling old versions of surfer...
TimeoutExpired: Command '"C:\ProgramData\{5F3A4BBA-1519-45F2-9BF7-1E9924E32CAA}\Surfer(11.1.719)_Installer.exe" REMOVE=TRUE MODIFY=FALSE SILENT=TRUE' timed out after 180 seconds with output ''''
Stimmt etwas mit meinem Skript nicht?
Tritt dieses Verhalten auf, wenn Sie das Skript in PyScripter oder über WAPTService ausführen? Falls es über PyScripter funktioniert, liegt das Problem möglicherweise darin, dass der Befehl im Kontext „Lokales System“ ausgeführt wird (WaptService läuft als „Lokales System“).
Prost,
Denis
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 26. September 2018 – 14:17 Uhr
von Empbilly
Tritt dieses Verhalten auf, wenn Sie das Skript in PyScripter oder über WAPTService ausführen? Falls es über PyScripter funktioniert, liegt das Problem möglicherweise darin, dass der Befehl im Kontext „Lokales System“ ausgeführt wird (WaptService läuft als „Lokales System“).
Ich nutze WAPTService.
Gibt es eine Möglichkeit, dieses Problem zu beheben?
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 26. September 2018 – 15:16 Uhr
von dcardon
Hallo Empbilly,
embilly schrieb: ↑26. September 2018 - 14:17 Uhr
Tritt dieses Verhalten auf, wenn Sie das Skript in PyScripter oder über WAPTService ausführen? Falls es über PyScripter funktioniert, liegt das Problem möglicherweise darin, dass der Befehl im Kontext „Lokales System“ ausgeführt wird (WaptService läuft als „Lokales System“).
Ich nutze WAPTService.
Gibt es eine Möglichkeit, dieses Problem zu beheben?
Sie sollten versuchen, die Deinstallationsdatei im Kontext des lokalen Systems auszuführen. Dazu können Sie tis-ms-pstools installieren und ausführen
Um eine Shell als „lokales System“ zu erhalten, können Sie Folgendes verwenden:
Um zu überprüfen, ob Sie tatsächlich als SYSTEM angemeldet sind, führen Sie anschließend die Deinstallationsdatei aus.
Wenn das funktioniert, können Sie dann versuchen, pyscripter als "lokales System" zu starten und prüfen, ob die Paketinstallation auf die gleiche Weise abläuft wie in Ihrem Benutzerkontext.
Prost,
Denis
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 26. September 2018 – 18:53 Uhr
von Empbilly
dcardon,
Wie kann ich "psexec ..." in das obige Skript einfügen?
Betreff: Die Syntax für den Dateinamen ist falsch
Veröffentlicht: 26. September 2018 – 19:44 Uhr
von dcardon
Hallo Elias,
embilly schrieb: ↑26. Sep. 2018 - 18:53 Uhr
dcardon,
Wie kann ich "psexec ..." in das obige Skript einfügen?
Sie müssen psexec nicht in setup.py einbinden. Mit Psexec können Sie eine Sitzung als „Lokales System“ starten und überprüfen, ob sich das Verhalten bei der Installation und Deinstallation von Software ändert.
Sie sollten cmd.exe einfach als Administrator mit erhöhten Rechten öffnen (Sie können dies überprüfen mit
whoami /groups
dass Sie das Sicherheitstoken S-1-16-12288 am Ende der Liste haben). Dann geben Sie Folgendes ein:
psexec -i -s cmd.exe
Sie sollten nun eine weitere Eingabeaufforderung erhalten. In dieser Eingabeaufforderung können Sie Folgendes eingeben:
wer bin ich?
Um sicherzustellen, dass Sie sich tatsächlich im "Lokalen System"-Modus befinden, können Sie anschließend testen, ob sich die Deinstallationsdatei (EXE) in diesem Kontext korrekt verhält.
Prost,
Denis