Die ClickOnce-Anwendung startet nicht über Process.Start ("x.abc"), wobei * .abc mit der ClickOnce-Anwendung verknüpft ist
Ich habe erfolgreich eine ClickOnce-Anwendung entwickelt und bereitgestellt, die beispielsweise eine zugehörige Dateierweiterung registriert*.abc
. Wenn ich auf eine Datei mit dem Namen klickex.abc
oder wenn ich tippex.abc
Über die Eingabeaufforderung wird die ClickOnce-Anwendung gestartet, und ich kann die Datei über die dedizierte API abrufen. Ich kann die Anwendung auch programmgesteuert mit folgendem Code starten:
System.Diagnostics.Process.Start ("x.abc");
Alles funktioniert gut auf meinem Windows Vista 64-Bit-Box.
Wenn ich jedoch versuche, genau dasselbe unter Windows 7 (auch 64-Bit) zu tun, habe ich ein sehr seltsames Problem. Folgendes beobachte ich:
Manueller Start vonx.abc
per Doppelklick im Explorer funktioniert es.Manueller Start vonx.abc
an der Eingabeaufforderung funktioniert.Process.Start("x.abc")
startet die Anwendung nicht; Das zurückgegebene Prozessobjekt zeigt jedoch an, dass kein Fehler aufgetreten ist und dass die ClickOnce-Anwendung auf irgendeine Weise sofort beendet wurde. Aber auch einTrace
Ganz am Anfang der ClickOnce-Anwendung wird nie erreicht.Fremder noch,Process.Start("x.bat")
mit einer Dateix.bat
die einzelne Zeile enthältx.abc
startet auch die ClickOnce-Anwendung nicht! Gleichx.bat
aus dem Explorer gestartet funktioniert (natürlich).Ich versuche zu analysieren, was damit passiertProcMon
war nicht sehr hilfreich, da der ClickOnce-Prozess zum Starten einer Anwendung aus meiner Sicht sehr schwierig zu verfolgen ist. ich beobachterundll32
zur Arbeit zu kommen, aber keine Beweise für ein Versagen.
Das Programm, das das machtProcess.Start
ist eine voll vertrauenswürdige Konsolenanwendung mit wirklich nichts Besonderem.
Ich kann nicht sehen, was sich in Bezug darauf geändert hat, wie ClickOnce-Anwendungen unter Windows 7 gehandhabt werden und warumProcess.Start
würde nicht genau das Gleiche tun wie das Starten der Datei aus dem Explorer. Es ist erwähnenswert, dass mit fortgeschritteneren Versionen derStart
Methode mitProcessStartInfo
und EinstellungUseShellExecute
zutrue
hat auch nicht geholfen.
Beginnendcmd
mitProcess.Start
und dann versuchen zu startenx.abc
zeigt genau das gleiche Problem. Wenn ich die Umgebungseinstellungen mit einem vergleichecmd
manuell gestartet, sehe ich Unterschiede in wieProgramFiles
ist definiert (der erste zeigt aufC:\Program Files (x86)
während der zweite Punkt aufC:\Program Files
). Die von meiner .NET-Anwendung gestarteten Anwendungen werden auf der 32-Bit-Emulationsschicht (SysWoW64) gestartet.
Ich konnte den Startfehler von reproduzierenx.abc
durch Starten einer 32-Bit-Version der Eingabeaufforderung (d. h.%windir%\SysWoW64\cmd.exe
) und dann tippenx.abc
an der Eingabeaufforderung. Ich habe auch eine hässliche Problemumgehung gefunden, die darin besteht, eine 64-Bit-Eingabeaufforderung von der 32-Bit-Umgebung aus durch Starten zu starten%windir%\Sysnative\cmd.exe /C x.abc
anstattx.abc
.
Aber ich würde lieber eine saubere Methode verwenden (oder einen Microsoft-Vertreter sagen lassen, dass dies in der Tat ein Problem mit Windows 7 und / oder ClickOncce ist und dass es bald behoben wird).