Chcesz uruchomić wystąpienie notatnika ze swojego programu i otworzyć określony plik?
Dismissile
1
Uwaga: Kiedy próbowałem to z .Net 2.0, Process.Startnie rozwijałem automatycznie "% windir%", chociaż pomijanie go, jak w odpowiedzi viabhav, lub rozszerzenie go jawnie ( Environment.GetEnvironmentVariable("windir")) działało pomyślnie.
Drugie podejście jest prawdopodobnie lepszą praktyką, ponieważ spowoduje to, że powłoka systemu Windows otworzy plik za pomocą skojarzonego z nim edytora. Dodatkowo, jeśli określony plik nie ma skojarzenia, użyje Open With...okna dialogowego z systemu Windows.
Uwaga dla osób w komentarzach, dziękuję za wkład. Moja szybka i brudna odpowiedź była nieco błędna, zaktualizowałem odpowiedź, aby odzwierciedlała prawidłowy sposób.
Zgadzam się, że jest to jeden ze sposobów, aby to zrobić, innym sposobem, jeśli chcesz otworzyć dokument, ale nie uruchomić programu, byłoby użycie czegoś w stylu: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) do załadowania rzeczywistą zawartość do pliku.
Jim
1
Lepiej jest podać nazwę pliku jako drugi parametr. Właściwie, zgodnie z dokumentacją , twój kod nie powinien działać, ponieważ pojedynczym parametrem Process.Startjest nazwa dokumentu lub pliku aplikacji, podczas gdy twój to nazwa aplikacji połączona z parametrem wiersza poleceń.
Vlad
@Albin: Dzięki, całkowicie to przeoczyłem: p @Jim: Myślę, że chodziło o pytanie, jak uruchomić edytor. @Vlad: Dzięki, masz rację.
Aren
11
Korzystanie Process.Start(filename)potencjalne wtrysku poleceń, przy czym osoba atakująca mogłaby zastąpić MyTextFile.txtna MyMalicious.batlub fdisk .... Lepiej używać Process.Start("notepad.exe", filename).
Geoff Bennett
29
Nie podajesz zbyt wielu informacji, ale zakładając, że chcesz otworzyć dowolny plik na swoim komputerze za pomocą aplikacji określonej dla domyślnej procedury obsługi dla tego typu pliku, możesz użyć czegoś takiego:
var fileToOpen ="SomeFilePathHere";var process =newProcess();
process.StartInfo=newProcessStartInfo(){UseShellExecute=true,FileName= fileToOpen
};
process.Start();
process.WaitForExit();
Parametr UseShellExecute informuje system Windows, aby używał programu domyślnego dla typu otwieranego pliku.
WaitForExit spowoduje, że aplikacja zaczeka, aż aplikacja, którą zmyłeś, zostanie zamknięta.
Nawiasem mówiąc,% pathVariables% nie działa z tą metodą. Process.Start(@"%windir%\notepad.exe");zgłasza wyjątek Win32Exception: „Cannot find file”, ale normalnie powinno działać.
Aren
@Aren: które można rozwiązać wywołując Environment.ExpandEnvironmentVariables ()
Process.Start
nie rozwijałem automatycznie "% windir%", chociaż pomijanie go, jak w odpowiedzi viabhav, lub rozszerzenie go jawnie (Environment.GetEnvironmentVariable("windir")
) działało pomyślnie.Odpowiedzi:
Potrzebujesz
System.Diagnostics.Process.Start()
.Najprostszy przykład:
Bardziej ogólne podejście:
Drugie podejście jest prawdopodobnie lepszą praktyką, ponieważ spowoduje to, że powłoka systemu Windows otworzy plik za pomocą skojarzonego z nim edytora. Dodatkowo, jeśli określony plik nie ma skojarzenia, użyje
Open With...
okna dialogowego z systemu Windows.Uwaga dla osób w komentarzach, dziękuję za wkład. Moja szybka i brudna odpowiedź była nieco błędna, zaktualizowałem odpowiedź, aby odzwierciedlała prawidłowy sposób.
źródło
Process.Start
jest nazwa dokumentu lub pliku aplikacji, podczas gdy twój to nazwa aplikacji połączona z parametrem wiersza poleceń.Process.Start(filename)
potencjalne wtrysku poleceń, przy czym osoba atakująca mogłaby zastąpićMyTextFile.txt
naMyMalicious.bat
lubfdisk ...
. Lepiej używaćProcess.Start("notepad.exe", filename)
.Nie podajesz zbyt wielu informacji, ale zakładając, że chcesz otworzyć dowolny plik na swoim komputerze za pomocą aplikacji określonej dla domyślnej procedury obsługi dla tego typu pliku, możesz użyć czegoś takiego:
Parametr UseShellExecute informuje system Windows, aby używał programu domyślnego dla typu otwieranego pliku.
WaitForExit spowoduje, że aplikacja zaczeka, aż aplikacja, którą zmyłeś, zostanie zamknięta.
źródło
if(File.Exists(fileToOpen))
znaku, aby uniknąć wystąpienia wyjątku.to otworzy plik w domyślnym programie Windows (notatniku, jeśli go nie zmieniłeś);
źródło
źródło
Możesz użyć
Process.Start
, wywołującnotepad.exe
plik jako parametr.źródło
Process.Start(@"%windir%\notepad.exe");
zgłasza wyjątek Win32Exception: „Cannot find file”, ale normalnie powinno działać.Użyj System.Diagnostics.Process, aby uruchomić wystąpienie Notepad.exe.
źródło