Приложение 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 и что она будет исправлена в ближайшее время).