Вы хотите запустить экземпляр блокнота из своей программы и открыть определенный файл?
Уволен
1
Примечание. Когда я пробовал это с .Net 2.0, Process.Startавтоматически не расширял "% windir%", хотя опускание его, как в ответе viabhav, или его явное расширение ( Environment.GetEnvironmentVariable("windir")) сработало успешно.
Второй подход, вероятно, лучше, так как это заставит оболочку Windows открыть ваш файл с помощью связанного с ним редактора. Кроме того, если указанный файл не имеет ассоциации, он будет использовать Open With...диалог из окон.
Обратите внимание на тех, кто находится в комментариях, спасибо за ваш вклад. Мой быстрый и грязный ответ был немного неправильным, я обновил ответ, чтобы отразить правильный путь.
Я согласен с тем, что это один способ сделать это, а другой способ, если вы хотите открыть документ, но не запускать программу, - это использовать что-то вроде: richTextBox1.LoadFile (Program.editInC, RichTextBoxStreamType.UnicodePlainText) для загрузки фактическое содержимое в файл.
Джим
1
Лучше передать имя файла в качестве второго параметра. На самом деле, согласно документации , ваш код не должен работать, поскольку единственный параметр Process.Start- это имя файла документа или приложения, тогда как ваш - имя приложения в сочетании с параметром командной строки.
Влад
@Albin: Спасибо, совершенно не заметил этого: p @Jim: Я думаю, вопрос был в том, как запустить редактор. @Vlad: Спасибо, вы правы.
Арен
11
Использование Process.Start(filename)является потенциальной инъекцией команды, в результате чего злоумышленник может заменить MyTextFile.txtна MyMalicious.batили fdisk .... Лучше использовать Process.Start("notepad.exe", filename).
Джефф Беннетт
29
Вы не предоставляете много информации, но предполагая, что вы хотите открыть любой файл на своем компьютере с помощью приложения, указанного для обработчика по умолчанию для этого типа файла, вы можете использовать что-то вроде этого:
var fileToOpen ="SomeFilePathHere";var process =newProcess();
process.StartInfo=newProcessStartInfo(){UseShellExecute=true,FileName= fileToOpen
};
process.Start();
process.WaitForExit();
Параметр UseShellExecute указывает Windows использовать программу по умолчанию для типа файла, который вы открываете.
WaitForExit заставит ваше приложение ждать, пока приложение, которое вы запустили, не будет закрыто.
Кстати,% pathVariables% не работают с этим методом. Process.Start(@"%windir%\notepad.exe");выдает исключение Win32Exception: «Не удается найти файл», но обычно он должен работать.
Aren
@Aren: это можно решить, вызвав Environment.ExpandEnvironmentVariables ()
Process.Start
автоматически не расширял "% windir%", хотя опускание его, как в ответе viabhav, или его явное расширение (Environment.GetEnvironmentVariable("windir")
) сработало успешно.Ответы:
Вам нужно
System.Diagnostics.Process.Start()
.Самый простой пример:
Более общий подход:
Второй подход, вероятно, лучше, так как это заставит оболочку Windows открыть ваш файл с помощью связанного с ним редактора. Кроме того, если указанный файл не имеет ассоциации, он будет использовать
Open With...
диалог из окон.Обратите внимание на тех, кто находится в комментариях, спасибо за ваш вклад. Мой быстрый и грязный ответ был немного неправильным, я обновил ответ, чтобы отразить правильный путь.
источник
Process.Start
- это имя файла документа или приложения, тогда как ваш - имя приложения в сочетании с параметром командной строки.Process.Start(filename)
является потенциальной инъекцией команды, в результате чего злоумышленник может заменитьMyTextFile.txt
наMyMalicious.bat
илиfdisk ...
. Лучше использоватьProcess.Start("notepad.exe", filename)
.Вы не предоставляете много информации, но предполагая, что вы хотите открыть любой файл на своем компьютере с помощью приложения, указанного для обработчика по умолчанию для этого типа файла, вы можете использовать что-то вроде этого:
Параметр UseShellExecute указывает Windows использовать программу по умолчанию для типа файла, который вы открываете.
WaitForExit заставит ваше приложение ждать, пока приложение, которое вы запустили, не будет закрыто.
источник
if(File.Exists(fileToOpen))
чтобы избежать исключения.это откроет файл с программой Windows по умолчанию (блокнот, если вы его не меняли);
источник
источник
Вы можете использовать
Process.Start
вызовnotepad.exe
с файлом в качестве параметра.источник
Process.Start(@"%windir%\notepad.exe");
выдает исключение Win32Exception: «Не удается найти файл», но обычно он должен работать.Используйте System.Diagnostics.Process, чтобы запустить экземпляр Notepad.exe.
источник