Vale a pena para procurar o aplicativo padrão no registro ao abrir um arquivo de um aplicativo C #?

StackOverflow https://stackoverflow.com/questions/886411

  •  23-08-2019
  •  | 
  •  

Pergunta

Estou construindo uma aplicação (um projeto paralelo que é provável que conte com a ajuda da comunidade stackoverflow em mais de uma ocasião), que terá de abrir uma variedade de tipos de arquivo (ou seja, documentos do Word aberto no Word, não nativamente no meu aplicativo).

Eu tenho jogado com algum código para procurar o aplicativo padrão para o tipo de arquivo no registro e passar isso para Process.Start (). Parece haver dois problemas com essa abordagem:

1) O nome do aplicativo é citado em alguns casos, e em outros não.
2) Process.Start () requer que o caminho da aplicação e é argumentos são passados ??separadamente (isto é, Process.Start ( "notepad.exe", @ "C: \ meuarquivo.txt"); em vez de Process.Start (@ "bloco de notas .exe C:. \ myfile.txt ");)

Isto significa que quando eu recuperar o caminho do registro, eu tenho que dividi-lo (depois de determinar se eu preciso dividir em citações ou espaços) para determinar qual parte é o caminho do aplicativo e que partes são argumentos, em seguida, passar os separadamente para Process.Start ().

A alternativa parece ser a de simplesmente passar o nome do arquivo, como em Process.Start (@ "C: \ myfile.txt")., Mas acho que isso só funciona se o aplicativo estiver na variável de ambiente Path

Qual é o melhor caminho? No caso do registro, existe uma solução comum para saber como fazer a análise argumento?

Obrigado por toda e qualquer ajuda!

Update:
Eu acho que a resposta é 'Não'
Parece que eu estava realmente indo a rota exagero, e que passando apenas o nome do arquivo irá funcionar sempre que há um valor associado no registro. Ou seja, qualquer coisa que eu encontrar no registro mim, Process.Start () já sabe como fazer.

eu descobri que quando eu tentar isso com um filetype "novo", eu recebo um Win32Exception afirmando que "Não há aplicativos associados ao arquivo especificado para esta operação." Fredrik Mörk menciona em um comentário que isso não ocorre para ele em Vista. Qual é a maneira correta de lidar com isso?

Foi útil?

Solução

Se a extensão está registrado para ser aberto com um determinado aplicativo, ele não precisa estar no PATH, a fim de prazo.

Outras dicas

A aplicação não precisa estar no PATH, se você especificar apenas o nome do arquivo. O código a seguir funcionou bem para mim:

            System.Diagnostics.Process.Start(@"C:\Users\Dan\Desktop\minors.pdf");

Você normalmente não precisa procurar o programa para tipos registrados, eo programa normalmente não precisa ser na variável de ambiente PATH. Normalmente, o comando no registro contém o caminho completo. Isto é como o comando para arquivos .kml aparência (Google Earth) (em meu computador):

C:\Program Files\Google\Google Earth\googleearth.exe "%1"

Tendo em conta que, com segurança você pode apenas usar Process.Start juntamente com os nomes de arquivo de documentos. Deve ser que o tipo de arquivo não está registrado você vai invocar o comportamento padrão do Windows para isso (pedir-lhe que programa para o uso, e assim por diante).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top