Приложение ClickOnce не запускается через Process.Start («x.abc») с * .abc, связанным с приложением ClickOnce

Я успешно разработал и развернул приложение ClickOnce, которое регистрирует соответствующее расширение файла, например*.abc, Когда я нажимаю на файл с именемx.abc или если я наберуx.abc из командной строки запускается приложение ClickOnce, и я могу получить файл через специальный API. Я также могу запустить приложение программно с помощью следующего кода:

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

Все отлично работает на моей виндеVista 64битовая коробка.

Однако, если я пытаюсь сделать то же самое на Windows 7 (также 64немного), у меня очень странная проблема. Вот что я наблюдаю:

Ручной запускx.abc двойным щелчком по нему из проводника работает.Ручной запускx.abc из командной строки работает.Process.Start("x.abc") не запускает приложение; однако возвращенный объект процесса показывает, что ошибки не было и что приложение ClickOnce каким-то образом завершилось немедленно. Но дажеTrace в самом начале приложение ClickOnce никогда не достигается.Еще незнакомец,Process.Start("x.bat") с файломx.bat содержащий одну строкуx.abc также не запускает приложение ClickOnce! Так жеx.bat запустил из проводника работает (конечно).

Пытаясь проанализировать, что происходит сProcMon был не очень полезен, так как процесс запуска приложения в ClickOnce очень сложен, с моей точки зрения. Я наблюдаюrundll32 добираться до работы, но нет доказательств какой-либо неудачи.

Программа, которая делаетProcess.Start консольное приложение с полным доверием, в котором нет ничего особенного

Я могу'не видно, что изменилось в отношении того, как обрабатываются приложения ClickOnce в Windows 7 и почемуProcess.Start не будет делать точно так же, как запуск файла из Проводника. Это'Стоит отметить, что использование более продвинутых версийStart метод сProcessStartInfo и настройкаUseShellExecute вtrue тоже не помогло.

началоcmd сProcess.Start а затем пытается запуститьx.abc показывает точно такую же проблему. Если я сравню настройки среды сcmd началось вручную, я вижу различия в том, какProgramFiles определяется (первый указывает наC:\Program Files (x86) тогда как второй указывает наC:\Program Files). Приложения, запущенные из моего приложения .NET, запускаются на уровне 32-битной эмуляции (SysWoW64).

Я смог воспроизвести сбой запускаx.abc запустив 32-разрядную версию командной строки (то есть%windir%\SysWoW64\cmd.exe), а затем набравx.abc по подсказке. Я также нашел уродливый обходной путь, который заключается в запуске 64-разрядной командной строки из 32-разрядной среды путем запуска%windir%\Sysnative\cmd.exe /C x.abc вместо .x.abc

Но я'Я предпочел бы использовать чистый способ сделать это (или попросить представителя Microsoft сказать, что это действительно проблема с Windows 7 и / или ClickOncce и что она будет исправлена в ближайшее время).

Ответы на вопрос(4)

Ваш ответ на вопрос