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).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage