Sie möchten eine Instanz von Notepad aus Ihrem Programm heraus starten und eine bestimmte Datei öffnen lassen?
Entlassung
1
Hinweis: Als ich es mit .Net 2.0 ausprobierte Process.Start, wurde "% windir%" nicht automatisch erweitert, obwohl das Auslassen wie in der Antwort von viabhav oder das explizite Erweitern ( Environment.GetEnvironmentVariable("windir")) erfolgreich funktioniert hat.
Brian
Sie können einen Notizblockklon in Ihre Anwendung integrieren und so anpassen, dass er genau so funktioniert, wie Sie es möchten. Ich schreibe einen Notizblock-Klon in C #. Sie finden ihn hier: simplygoodcode.com/2012/04/notepad-clone-in-net-winforms.html
Luis Perez
Antworten:
190
Du brauchst System.Diagnostics.Process.Start().
Das einfachste Beispiel:
Process.Start("notepad.exe", fileName);
Allgemeinerer Ansatz:
Process.Start(fileName);
Der zweite Ansatz ist wahrscheinlich eine bessere Vorgehensweise, da dadurch die Windows-Shell Ihre Datei mit dem zugehörigen Editor öffnet. Wenn die angegebene Datei keine Zuordnung hat, wird außerdem der Open With...Dialog aus Windows verwendet.
Hinweis an diejenigen in den Kommentaren, danke für Ihre Eingabe. Meine schnelle und schmutzige Antwort war etwas falsch. Ich habe die Antwort aktualisiert, um den richtigen Weg wiederzugeben.
Ich bin damit einverstanden, dass dies eine Möglichkeit ist, dies zu tun. Eine andere Möglichkeit, wenn Sie das Dokument öffnen, aber das Programm nicht ausführen möchten, besteht darin, Folgendes zu verwenden: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) zum Laden des Dokuments tatsächlicher Inhalt in eine Datei.
Jim
1
Es ist besser, den Dateinamen als zweiten Parameter zu übergeben. Laut Dokumentation sollte Ihr Code eigentlich nicht funktionieren, da der einzige Parameter von Process.StartDokument- oder Anwendungsdateiname ist, während Ihr Name der Anwendungsname in Kombination mit dem Befehlszeilenparameter ist.
Vlad
@Albin: Danke, das habe ich völlig übersehen: p @Jim: Ich glaube, die Frage war, wie man einen Editor startet. @Vlad: Danke, du bist richtig.
Aren
11
Mit Process.Start(filename)einer potenziellen Befehl Injektion, wodurch ein Angreifer ersetzen könnte MyTextFile.txtfür MyMalicious.batoder fdisk .... Besser zu benutzen Process.Start("notepad.exe", filename).
Geoff Bennett
29
Sie geben nicht viele Informationen an, aber wenn Sie nur eine beliebige Datei auf Ihrem Computer mit der Anwendung öffnen möchten, die für den Standardhandler für diesen Dateityp angegeben ist, können Sie Folgendes verwenden:
var fileToOpen ="SomeFilePathHere";var process =newProcess();
process.StartInfo=newProcessStartInfo(){UseShellExecute=true,FileName= fileToOpen
};
process.Start();
process.WaitForExit();
Der Parameter UseShellExecute weist Windows an, das Standardprogramm für den Dateityp zu verwenden, den Sie öffnen.
Der WaitForExit bewirkt, dass Ihre Anwendung wartet, bis die von Ihnen luanchierte Anwendung geschlossen wurde.
% PathVariables% funktionieren übrigens nicht mit dieser Methode. Process.Start(@"%windir%\notepad.exe");löst eine Win32Exception aus: "Datei kann nicht gefunden werden", aber normalerweise sollte es funktionieren.
Aren
@Aren: das kann gelöst werden, indem Environment.ExpandEnvironmentVariables ()
Process.Start
, wurde "% windir%" nicht automatisch erweitert, obwohl das Auslassen wie in der Antwort von viabhav oder das explizite Erweitern (Environment.GetEnvironmentVariable("windir")
) erfolgreich funktioniert hat.Antworten:
Du brauchst
System.Diagnostics.Process.Start()
.Das einfachste Beispiel:
Allgemeinerer Ansatz:
Der zweite Ansatz ist wahrscheinlich eine bessere Vorgehensweise, da dadurch die Windows-Shell Ihre Datei mit dem zugehörigen Editor öffnet. Wenn die angegebene Datei keine Zuordnung hat, wird außerdem der
Open With...
Dialog aus Windows verwendet.Hinweis an diejenigen in den Kommentaren, danke für Ihre Eingabe. Meine schnelle und schmutzige Antwort war etwas falsch. Ich habe die Antwort aktualisiert, um den richtigen Weg wiederzugeben.
quelle
Process.Start
Dokument- oder Anwendungsdateiname ist, während Ihr Name der Anwendungsname in Kombination mit dem Befehlszeilenparameter ist.Process.Start(filename)
einer potenziellen Befehl Injektion, wodurch ein Angreifer ersetzen könnteMyTextFile.txt
fürMyMalicious.bat
oderfdisk ...
. Besser zu benutzenProcess.Start("notepad.exe", filename)
.Sie geben nicht viele Informationen an, aber wenn Sie nur eine beliebige Datei auf Ihrem Computer mit der Anwendung öffnen möchten, die für den Standardhandler für diesen Dateityp angegeben ist, können Sie Folgendes verwenden:
Der Parameter UseShellExecute weist Windows an, das Standardprogramm für den Dateityp zu verwenden, den Sie öffnen.
Der WaitForExit bewirkt, dass Ihre Anwendung wartet, bis die von Ihnen luanchierte Anwendung geschlossen wurde.
quelle
if(File.Exists(fileToOpen))
, um zu vermeiden, dass eine Ausnahme auftritt.Dadurch wird die Datei mit dem Standard-Windows-Programm geöffnet (Editor, wenn Sie ihn nicht geändert haben).
quelle
quelle
Sie können den
Process.Start
Aufrufnotepad.exe
mit der Datei als Parameter verwenden.quelle
Process.Start(@"%windir%\notepad.exe");
löst eine Win32Exception aus: "Datei kann nicht gefunden werden", aber normalerweise sollte es funktionieren.Verwenden Sie System.Diagnostics.Process , um eine Instanz von Notepad.exe zu starten.
quelle