| 

.NET C# Java Javascript Exception

2
Ich hole mir zuerst meinen Uninstallstring aus der registry und bekomme beim Ausführen die Meldung
"Das System kann den angegebenen Pfad nicht finden"

Ich vermute, dass es an den doppelten Backslashes im string liegt. Der Stringinhalt funktioniert wenn ich in direkt in Windows, Ausführen starte ohne doppelte backslashes .

Mit string.replace sollte ich die doppelten Backslashes ja wegbekommen (?); doch folgender Code liefert immer den gleichen String inkl doppelter Backslashes zurück:

string sUninstPfadExecute = sUninstPfad.Replace(@"\\", @"\");


sUninstPfad und sUninstPfadExecute sind somit befüllt mit
"C:\\Programme\\MeinProg\\UNINSTALL.EXE -u \"C:\\Programme\\MeinProg\\Setup.txt\""

<EDIT>
Das Uninstall zu starten versuche ich über
System.Diagnostics.Process.Start(sUninstPfadExecute)

Es muss wirklich an etwas anderem liegen, gebe ich sUninstPfad und sUninstPfadExecute aus sind nur einfache backslashes enthalten.
Habe mich da vom "Lokal" Fenster in VS täuschen lassen, auch dort wird der Stringinhalt mit doppelten \ ausgegeben.
30.09.2009
elcarus 63 1 4
2 Antworten
2
Lass Dich nicht von der Ausgabe im Debugger verwirren: Dort werden Backslashes nochmals 'escaped', also wird aus \ ein \\. Dies ist aber nur die Anzeige.

Im Zweifelsfall mach einfach
Console.WriteLine(sUninstPfad);
Console.WriteLine(sUninstPfadExecute);

und schau was das ausgibt.

Könnte es sein, dass Die Meldung nicht vom Process.Start() kommt, sondern eine Ausgabe von UNINSTALL.exe ist? Eventuell ist Setup.txt nicht vorhanden oder Dir fehlen Berechtigungen.
Wie führst Du den UnistallString aus?
Wird wirklich ein Process mit einer StartupInfo gestartet, oder versuchst Du einfach das hier?
Process.Start(sUninstPfad);

Das wird dann nicht klappen! Du musst einen Process erstellen mit unistall.exe und dem dann die Parameter '-u ...Setup.txt' mitgeben.
30.09.2009
DaSpors 4,2k 2 8
Also z.B.
Process.Start("C:\\Programme\\MeinProg\\UNINSTALL.EXE", "-u \"C:\\Programme\\MeinProg\\Setup.txt\"");
Leider ist es nicht trival, eine Kommandozeile in Programmname und Arumente zu zerlegen: Wenn die Kommandzeile mit einem Anführungzeichen beginnt, endet der Programname auch mit einem solchen; ansonsten ist das erste Whitespace das Trennzeichen zwischen Programmnamen und Argumenten.

Soviel ich weiß, gibt es im .NT Framework nicht einfach eine Function/Methode wie in C, die eine komplete Kommandozeile als Parameter erwartet: system()
BeachBlocker 01.10.2009
Ich habe natürlich System.Diagnostics beim Process.Start eingebunden. Das Problem war, dass ich meinen Uninstall Pfad sUninstPfad nicht aufgeteilt hatte in Process Start(string fileName, string arguments) . Per string.substring gelöst :)

elcarus 02.10.2009
1
Und das funktioniert auch nicht?:

string sUninstPfadExecute = sUninstPfad.Replace("\\", "\");
30.09.2009
Floyd 14,6k 3 9

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH