Aplikacja ClickOnce nie uruchamia się poprzez Process.Start („x.abc”) z * .abc powiązanym z aplikacją ClickOnce

Udało mi się opracować i wdrożyć aplikację ClickOnce, która rejestruje powiązane rozszerzenie pliku, na przykład*.abc. Kiedy klikam plik o nazwiex.abc lub jeśli piszęx.abc z wiersza polecenia uruchamia się aplikacja ClickOnce i mogę pobrać plik za pośrednictwem dedykowanego interfejsu API. Mogę również uruchomić aplikację programowo za pomocą następującego kodu:

System.Diagnostics.Process.Start ("x.abc");

Wszystko działa dobrze na moim 64-bitowym pudełku z Windows Vista.

Jeśli jednak spróbuję zrobić dokładnie to samo na Windows 7 (także 64-bitowym), mam bardzo dziwny problem. Oto, co obserwuję:

Ręczny początekx.abc poprzez dwukrotne kliknięcie go w Eksploratorze.Ręczny początekx.abc z wiersza poleceń działa.Process.Start("x.abc") nie uruchamia aplikacji; jednak zwrócony obiekt procesu pokazuje, że nie wystąpił błąd i że aplikacja ClickOnce w jakiś sposób zakończyła działanie. Ale nawetTrace na samym początku aplikacji ClickOnce nigdy nie jest osiągnięta.Nieznajomy jeszczeProcess.Start("x.bat") z plikiemx.bat zawierające pojedynczą linięx.abc nie uruchamia również aplikacji ClickOnce! Podobniex.bat rozpoczęty z Eksploratora (oczywiście).

Próbuję analizować, co się dziejeProcMon nie był bardzo pomocny, ponieważ z mojego punktu widzenia proces uruchamiania aplikacji ClickOnce jest bardzo trudny. Obserwujęrundll32 dostanie się do pracy, ale nie ma dowodów na niepowodzenie.

Program, który robiProcess.Start jest pełną zaufaną aplikacją konsolową, która nie ma nic szczególnego.

Nie widzę, co zmieniło się w odniesieniu do sposobu obsługi aplikacji ClickOnce w systemie Windows 7 i dlaczegoProcess.Start nie zrobiłby dokładnie tego samego, co uruchomienie pliku z Eksploratora. Warto wspomnieć, że przy użyciu bardziej zaawansowanych wersjiStart metoda zProcessStartInfo i ustawienieUseShellExecute dotrue też nie pomógł.

Startowycmd zProcess.Start a następnie próbuje uruchomićx.abc pokazuje dokładnie ten sam problem. Jeśli porównuję ustawienia środowiska zcmd uruchamiany ręcznie, widzę różnice w sposobieProgramFiles jest zdefiniowany (pierwszy wskazuje naC:\Program Files (x86) podczas gdy drugi wskazujeC:\Program Files). Aplikacje uruchomione z mojej aplikacji .NET są uruchamiane w 32-bitowej warstwie emulacji (SysWoW64).

Udało mi się odtworzyć awarię uruchomieniax.abc uruchamiając 32-bitową wersję wiersza polecenia (czyli%windir%\SysWoW64\cmd.exe) a następnie wpisującx.abc w wierszu polecenia. Odkryłem też brzydkie obejście, polegające na uruchomieniu 64-bitowego wiersza polecenia ze środowiska 32-bitowego przez uruchomienie%windir%\Sysnative\cmd.exe /C x.abc zamiastx.abc.

Ale wolę to zrobić w czysty sposób (lub poprosić przedstawiciela Microsoftu, aby powiedział mi, że jest to rzeczywiście problem z Windows 7 i / lub ClickOncce i że zostanie to naprawione wkrótce).

questionAnswers(4)

yourAnswerToTheQuestion