Aplicativo ClickOnce não inicia através de Process.Start (“x.abc”) com * .abc associado ao aplicativo ClickOnce

Desenvolvi e implementei com sucesso um aplicativo ClickOnce que registra uma extensão de arquivo associada, por exemplo*.abc. Quando clico em um arquivo chamadox.abc ou se eu digitarx.abc no prompt de comando, o aplicativo ClickOnce é iniciado e posso recuperar o arquivo por meio da API dedicada. Também posso iniciar o aplicativo por meio de programação com o seguinte código:

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

Tudo funciona bem na minha caixa de 64 bits do Windows Vista.

No entanto, se eu tentar fazer exatamente a mesma coisa em um Windows 7 (também 64 bits), tenho um problema muito estranho. Aqui está o que eu observo:

Início manual dex.abc clicando duas vezes nos trabalhos do Explorer.Início manual dex.abc a partir do prompt de comando funciona.Process.Start("x.abc") não inicia o aplicativo; no entanto, o objeto de processo retornado mostra que não houve erro e que o aplicativo ClickOnce de alguma forma saiu imediatamente. Mas mesmo umTrace no início do aplicativo ClickOnce nunca é alcançado.Estranho aindaProcess.Start("x.bat") com um arquivox.bat contendo a linha únicax.abc não inicia o aplicativo ClickOnce também! Mesmox.bat iniciado a partir dos trabalhos do Explorer (claro).

Tentando analisar o que acontece comProcMon não foi muito útil, pois o processo ClickOnce de iniciar um aplicativo é muito difícil de seguir, do meu ponto de vista. Eu observorundll32 chegar ao trabalho, mas nenhuma evidência de qualquer falha.

O programa que está fazendo oProcess.Start é um aplicativo de console de confiança total com nada realmente extravagante.

Não consigo ver o que mudou com relação a como os aplicativos ClickOnce são manipulados no Windows 7 e por queProcess.Start não faria exatamente o mesmo que lançar o arquivo do Explorer. Vale a pena mencionar que o uso de versões mais avançadas doStart método comProcessStartInfo e estabelecendoUseShellExecute paratrue também não ajudou.

Iniciandocmd comProcess.Start e depois tentar lançarx.abc mostra exatamente o mesmo problema. Se eu comparar as configurações do ambiente com umcmd iniciado manualmente, vejo diferenças na forma comoProgramFiles é definido (o primeiro aponta paraC:\Program Files (x86) enquanto o segundo aponta paraC:\Program Files). Os aplicativos iniciados pelo meu aplicativo .NET são iniciados na camada de emulação de 32 bits (SysWoW64).

Consegui reproduzir a falha de lançamento dox.abc iniciando uma versão de 32 bits do prompt de comando (ou seja,%windir%\SysWoW64\cmd.exe) e depois digitandox.abc no prompt. Eu também encontrei uma solução feia, que é iniciar um prompt de comando de 64 bits a partir do ambiente de 32 bits, iniciando%windir%\Sysnative\cmd.exe /C x.abc ao invés dex.abc.

Mas eu prefiro usar uma maneira limpa de fazê-lo (ou ter um representante da Microsoft me dizendo que isso é realmente um problema com o Windows 7 e / ou ClickOncce e que será corrigido em breve).

questionAnswers(4)

yourAnswerToTheQuestion