Você deseja iniciar uma instância do bloco de notas do seu programa e fazê-lo abrir um arquivo específico?
Dismissibilidade em
1
Nota: Quando tentei com .Net 2.0, Process.Startnão expandiu automaticamente "% windir%", embora omiti-lo como na resposta de viabhav ou expandi-lo explicitamente ( Environment.GetEnvironmentVariable("windir")) funcionou com sucesso.
Brian,
Você pode integrar um clone do bloco de notas em seu aplicativo e personalizá-lo para funcionar da maneira que você deseja. Eu escrevo um clone do bloco de notas em C #. Você pode encontrá-lo aqui: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez
Respostas:
190
Você precisa System.Diagnostics.Process.Start().
O exemplo mais simples:
Process.Start("notepad.exe", fileName);
Abordagem mais genérica:
Process.Start(fileName);
A segunda abordagem é provavelmente a melhor prática, pois fará com que o shell do Windows abra seu arquivo com o editor associado. Além disso, se o arquivo especificado não tiver uma associação, ele usará a Open With...caixa de diálogo do Windows.
Nota para aqueles nos comentários, obrigado por sua contribuição. Minha resposta rápida e suja estava um pouco errada, eu atualizei a resposta para refletir a maneira correta.
Concordo que esta é uma maneira de fazer isso, outra maneira, se você quiser abrir o documento, mas não executar o programa, seria usar algo parecido com: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) para carregar o conteúdo real em um arquivo.
Jim
1
É melhor passar o nome do arquivo como um segundo parâmetro. Na verdade, de acordo com a documentação , seu código não deve funcionar, pois o único parâmetro de Process.Starté o nome do arquivo do documento ou do aplicativo, enquanto o seu é o nome do aplicativo combinado com o parâmetro da linha de comando.
Vlad,
@Albin: Obrigado, esqueci totalmente aquele: p @Jim: Acho que a questão era saber como lançar um editor. @Vlad: Obrigado, você está correto.
Aren
11
Usando Process.Start(filename)é uma injecção de comando potencial, pelo que um intruso poderia substituir MyTextFile.txtpara MyMalicious.batou fdisk .... Melhor usar Process.Start("notepad.exe", filename).
Geoff Bennett
29
Você não está fornecendo muitas informações, mas supondo que deseja abrir qualquer arquivo em seu computador com o aplicativo especificado para o manipulador padrão para esse tipo de arquivo, você pode usar algo assim:
var fileToOpen ="SomeFilePathHere";var process =newProcess();
process.StartInfo=newProcessStartInfo(){UseShellExecute=true,FileName= fileToOpen
};
process.Start();
process.WaitForExit();
O parâmetro UseShellExecute informa ao Windows para usar o programa padrão para o tipo de arquivo que você está abrindo.
O WaitForExit fará com que o seu aplicativo espere até que o aplicativo que você executou seja fechado.
A propósito,% pathVariables% não funciona com este método. Process.Start(@"%windir%\notepad.exe");lança uma Win32Exception: "Não é possível localizar o arquivo", mas normalmente deve funcionar.
Aren
@Aren: que pode ser resolvido chamando Environment.ExpandEnvironmentVariables ()
Process.Start
não expandiu automaticamente "% windir%", embora omiti-lo como na resposta de viabhav ou expandi-lo explicitamente (Environment.GetEnvironmentVariable("windir")
) funcionou com sucesso.Respostas:
Você precisa
System.Diagnostics.Process.Start()
.O exemplo mais simples:
Abordagem mais genérica:
A segunda abordagem é provavelmente a melhor prática, pois fará com que o shell do Windows abra seu arquivo com o editor associado. Além disso, se o arquivo especificado não tiver uma associação, ele usará a
Open With...
caixa de diálogo do Windows.Nota para aqueles nos comentários, obrigado por sua contribuição. Minha resposta rápida e suja estava um pouco errada, eu atualizei a resposta para refletir a maneira correta.
fonte
Process.Start
é o nome do arquivo do documento ou do aplicativo, enquanto o seu é o nome do aplicativo combinado com o parâmetro da linha de comando.Process.Start(filename)
é uma injecção de comando potencial, pelo que um intruso poderia substituirMyTextFile.txt
paraMyMalicious.bat
oufdisk ...
. Melhor usarProcess.Start("notepad.exe", filename)
.Você não está fornecendo muitas informações, mas supondo que deseja abrir qualquer arquivo em seu computador com o aplicativo especificado para o manipulador padrão para esse tipo de arquivo, você pode usar algo assim:
O parâmetro UseShellExecute informa ao Windows para usar o programa padrão para o tipo de arquivo que você está abrindo.
O WaitForExit fará com que o seu aplicativo espere até que o aplicativo que você executou seja fechado.
fonte
if(File.Exists(fileToOpen))
para evitar encontrar uma exceção.isso abrirá o arquivo com o programa padrão do Windows (bloco de notas, se você não o alterou);
fonte
fonte
Você pode usar
Process.Start
, chamandonotepad.exe
com o arquivo como parâmetro.fonte
Process.Start(@"%windir%\notepad.exe");
lança uma Win32Exception: "Não é possível localizar o arquivo", mas normalmente deve funcionar.Use System.Diagnostics.Process para iniciar uma instância do Notepad.exe.
fonte