c # відкритий файл із програмою та параметрами за замовчуванням


103

Найпростіший спосіб відкрити файл за допомогою програми за замовчуванням:

System.Diagnostics.Process.Start(@"c:\myPDF.pdf");

Однак я хотів би знати, чи існує спосіб встановлення параметрів програми за замовчуванням, тому що я хотів би відкрити pdf у визначеному номері сторінки.

Я знаю, як це зробити, створюючи новий процес і встановлюючи параметри, але таким чином мені потрібно вказати шлях програми, і мені хотілося б мати портативний додаток і не потрібно кожного разу встановлювати шлях програми Я використовую додаток на іншому комп’ютері. Моя ідея полягає в тому, що я сподіваюся, що на комп’ютері встановлено зчитувач PDF, і я скажу лише, що відкрити на сторінці.

Дякую.


Ви маєте на увазі відправлення параметрів у виконуваний файл Adobe, а не у файл pdf, але не використовуючи повний шлях?
Bali C

2
Як ви очікуєте, що це спрацює? Якщо ви не знаєте шлях програми, ви не знаєте, який переглядач PDF за замовчуванням, і ви не знаєте, який формат параметрів використовувати.
ken2k

2
Мало сказати, myProcess.StartInfo.FileName = "Acrobat.exe";не вказавши повний шлях до програми?
daniloquio

1
Погляньте на це питання ТА, щоб побачити, чи допомагає він
Марк Холл

2
@daniloquio: Я думаю, справа в тому, що ОП не знає, що кінцевий користувач встановив на своїй машині для читання файлів Adobe, це може бути Acrobat, Acrobat Reader або щось інше.
Surfbutler

Відповіді:


43

Якщо ви хочете, щоб файл відкривався за допомогою програми за замовчуванням, я маю на увазі, не вказуючи Acrobat або Reader, ви не можете відкрити файл на зазначеній сторінці.

З іншого боку, якщо вам все в порядку із зазначенням 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";

Ви можете запитати реєстр, щоб визначити програму за замовчуванням для відкриття файлів PDF, а потім відповідно визначити FileName у StartInfo вашого процесу.

Дотримуйтесь цього питання, щоб дізнатися, як це зробити: Пошук програми за замовчуванням для відкриття певного типу файлів у Windows


2
+1 Також я думаю, що можна знайти в реєстрі додаток, пов’язаний з будь-яким типом файлу, наприклад, ".pdf", а потім ввести це ім'я в параметр імені файлу. Див stackoverflow.com/questions/162331 / ...
Surfbutler

Чи є якийсь відкритий параметр, щоб змусити Adobe Reader відкритись у режимі перегляду на 2 сторінки? Просто цікаво, якщо хтось знає, це було б справді корисно. Я озирався, але нічого не можу знайти.
taki Martillo

18

це має бути близько!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}

1
Це ідеально !
Франсуа Жирар

1
Це працювало для мене при відкритті PDF-файлів із програмою за замовчуванням. Дякую!
Smitty-Werben-Jager-Manjenson

1
@imgen питання стосується надання номера сторінки як парам. Чи відповідає ця відповідь на це?
daniloquio

1
@daniloquio вибачте, я не прочитав досить глибоко питання.
imgen

2
Не забудьте обернути його в використовуючий блок, процес можна одноразово використовувати.
Рене Караннанте

7

Я перетворив код VB у дописі блогу, пов’язаного xsl, на C # та трохи змінив його:

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();

-5

Будь ласка, додайте Налаштування в розділі Властивості для проекту та використовуйте їх таким чином, щоб у вас були чисті та прості налаштування, які можна налаштувати за замовчуванням

Як: Створити нову настройку на час проектування

Оновлення: після коментарів нижче

  1. Клацніть правою кнопкою миші на проекті
  2. Додати новий елемент
  3. У розділі Visual C # items -> General
  4. Виберіть файл налаштувань

14
Можливо, неправильна вкладка? ;)
ken2k
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.