C # Как сохранить программу, чтобы открыть файл в? - PullRequest
0 голосов
/ 22 декабря 2011

Когда кнопка нажимается в нашем приложении, она загружает файл с сервера на клиент и открывает его для просмотра пользователем.Мы разрешаем пользователю выбрать приложение, чтобы открыть этот файл, но стандартное поле предлагает опцию «Всегда использовать выбранную программу, чтобы открыть файл такого типа».Без галочки это не имеет значения, и файл .rtf по умолчанию открывается в Word снова в следующий раз.

Как нам получить этот параметр для правильного хранения и получения?

Код, который мы используемиспользовать для отображения этого окна следующим образом:

//Ask the user what application they want to open the file in.
if (strFileName != "" && File.Exists(strFileName))
{
    // Call Windows "Open With" dialog
    CoreUtilities.ShowOpenFileDialog(strFileName);
}

Большое спасибо

Колин

Ответы [ 3 ]

0 голосов
/ 22 декабря 2011

Вот фрагмент кода, который вызывает Windows Открыть с помощью ... диалоговое окно,

Если CoreUtilities.ShowOpenFileDialog уже не реализован с использованием этого подхода, возможно, вам следует попробовать:

[Serializable]
public struct ShellExecuteInfo
{
    public int Size;
    public uint Mask;
    public IntPtr hwnd;
    public string Verb;
    public string File;
    public string Parameters;
    public string Directory;
    public uint Show;
    public IntPtr InstApp;
    public IntPtr IDList;
    public string Class;
    public IntPtr hkeyClass;
    public uint HotKey;
    public IntPtr Icon;
    public IntPtr Monitor;
}

// Code For OpenWithDialog Box

[DllImport("shell32.dll", SetLastError = true)]
extern public static bool 
       ShellExecuteEx(ref ShellExecuteInfo lpExecInfo);

public const uint SW_NORMAL = 1;

static void OpenAs(string file)
{
    ShellExecuteInfo sei = new ShellExecuteInfo();
    sei.Size = Marshal.SizeOf(sei);
    sei.Verb = "openas";
    sei.File = file;
    sei.Show = SW_NORMAL;
    if (!ShellExecuteEx(ref sei))
        throw new System.ComponentModel.Win32Exception();
}
0 голосов
/ 22 декабря 2011

Есть грязный хак, но я не знаю, понравится ли вам это :) Вы можете удалить сохраненную ассоциацию в реестре перед вызовом CoreUtilities.ShowOpenFileDialog () каждый раз. Вот путь в реестре

HKEY_CURRENT_USER / Software / Microsoft / Windows / CurrentVersion / Explorer / FileExts

Или вы можете попробовать запустить

System.Diagnostics.Process.Start(path);

Это всегда будет использовать программу по умолчанию. Или, если необходимо, показать диалог открытия с помощью (когда нет связанной программы по умолчанию)

0 голосов
/ 22 декабря 2011

Вы пытались открыть файл с помощью глагола "open"?

    public static void displayLabel(string labelFileName)
    {
        System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo(labelFileName);
        info.UseShellExecute = true;
        info.Verb = "open";
        System.Diagnostics.Process.Start(info);
    }

Я использую приведенный выше код для открытия файлов.Откроется файл с приложением по умолчанию, которое вы назначили для данного расширения.Например, при вызове с именем файла .pdf он откроется в Acrobat, а если вы передали его в формате .txt, он откроется в блокноте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...