С# открытый файл с приложением и параметрами по умолчанию
Самый простой способ открыть файл с помощью приложения по умолчанию:
System.Diagnostics.Process.Start(@"c:\myPDF.pdf");
Однако я хотел бы знать, существует ли способ установить параметры для приложения по умолчанию, потому что я хотел бы открыть PDF файл с определенным номером страницы.
Я знаю, как это сделать, создав новый процесс и установив параметры, но таким образом мне нужно указать путь к приложению, и я хотел бы иметь переносимое приложение, а не каждый раз устанавливать путь к приложению Я использую приложение на другом компьютере. Моя идея заключается в том, что я ожидаю, что на компьютере установлена программа чтения PDF файлов, и говорю только, что открыть на странице.
Благодарю.
Ответы
Ответ 1
РЕДАКТИРОВАТЬ (спасибо комментарию surfbutler в комментариях к вопросу)
Если вы хотите, чтобы файл был открыт приложением по умолчанию, я имею в виду без указания Acrobat или Reader, вы не можете открыть файл на указанной странице.
С другой стороны, если у вас есть Ok с указанием Acrobat или Reader, продолжайте читать:
Вы можете сделать это, не указав полный путь Acrobat, например:
Process myProcess = new Process();
myProcess.StartInfo.FileName = "acroRd32.exe"; //not the full application path
myProcess.StartInfo.Arguments = "/A \"page=2=OpenActions\" C:\\example.pdf";
myProcess.Start();
Если вы не хотите, чтобы PDF файл открывался с помощью Reader, но с Acrobat, выполните вторую строку следующим образом:
myProcess.StartInfo.FileName = "Acrobat.exe";
SECOND EDIT: поиск приложения по умолчанию для расширения PDF
Вы можете запросить реестр, чтобы определить приложение по умолчанию, чтобы открыть PDF файлы, а затем определить FileName в вашем процессе StartInfo соответственно. Again, thanks surfbutler for your comment :)
Следуйте этому вопросу для получения дополнительной информации об этом: Поиск приложения по умолчанию для открытия определенного типа файла в Windows
Ответ 2
Я преобразовал код VB в сообщение в блоге, связанное xsl с С#, и немного изменил его:
public static bool TryGetRegisteredApplication(
string extension, out string registeredApp)
{
string extensionId = GetClassesRootKeyDefaultValue(extension);
if (extensionId == null)
{
registeredApp = null;
return false;
}
string openCommand = GetClassesRootKeyDefaultValue(
Path.Combine(new[] {extensionId, "shell", "open", "command"}));
if (openCommand == null)
{
registeredApp = null;
return false;
}
registeredApp = openCommand
.Replace("%1", string.Empty)
.Replace("\"", string.Empty)
.Trim();
return true;
}
private static string GetClassesRootKeyDefaultValue(string keyPath)
{
using (var key = Registry.ClassesRoot.OpenSubKey(keyPath))
{
if (key == null)
{
return null;
}
var defaultValue = key.GetValue(null);
if (defaultValue == null)
{
return null;
}
return defaultValue.ToString();
}
}
РЕДАКТИРОВАТЬ - это ненадежно. См. Поиск приложения по умолчанию для открытия определенного типа файла в Windows.
Ответ 3
вы можете попробовать с помощью
Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();
Ответ 4
это должно быть близко!
public static void OpenWithDefaultProgram(string path)
{
Process fileopener = new Process();
fileopener.StartInfo.FileName = "explorer";
fileopener.StartInfo.Arguments = "\"" + path + "\"";
fileopener.Start();
}
Ответ 5
Пожалуйста, добавьте "Настройки" в "Свойства для проекта" и используйте их таким образом, чтобы у вас были чистые и простые настраиваемые параметры, которые можно настроить по умолчанию.
Как создать новую настройку во время разработки
Обновление: после комментариев ниже
- Щелкните правой кнопкой мыши по проекту
- Добавить новый элемент
- В разделе "Элементы Visual С#" → "Общие"
- Выберите файл настроек