2011-12-22 39 views
0

當我們的應用程序中點擊一個按鈕時,它會從服務器下載文件到客戶端並打開它供用戶查看。我們允許用戶選擇應用程序來打開該文件,但標準框提供了「始終使用所選程序打開此類文件」選項。不幸的是,勾選此項沒有任何區別,並且.rtf文件默認會在下次再次打開Word。C#如何保存程序以打開文件?

我們如何獲得此設置以正確存儲和檢索?

,我們正在使用,以顯示該窗口中的代碼如下:

//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); 
} 

非常感謝

科林

+1

我不認爲我們可以幫助你。您正在使用第三方文件打開對話框(CoreUtilities.ShowOpenFileDialog)。除非你提供給我們相關的代碼 - 我們不可能給你任何提示.. – Shai 2011-12-22 11:13:43

+0

@Shai - 它可能是他們自己的包裝一個標準.NET組件的類? – Adam 2011-12-22 11:15:30

+0

基本上你問的是如何保存用戶設置:[爲.NET應用程序存儲用戶設置的最佳方式是什麼?](http://stackoverflow.com/questions/26369/what-is-the-best-way -to-store-user-settings-for-a-net-application) – 2011-12-22 11:17:56

回答

-1

您是否嘗試過使用打開「打開」動詞的文件嗎?

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中傳遞一樣,它將在記事本中打開。

+0

你是否在談論'File.Open(String,FileMode)'? – Adam 2011-12-22 11:17:12

+1

我認爲他的意思是System.Diagnostics.Process.Start(...) – Elastep 2011-12-22 11:19:54

+0

@Erastep完全 – blak3r 2011-12-22 11:39:26

0

下面是一個代碼片段,與...對話框調用的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

有一個骯髒的黑客,但我不知道你是否會喜歡它:) 你可以在每次調用CoreUtilities.ShowOpenFileDialog()之前刪除存儲在註冊表中的關聯。 這裏的註冊表路徑

HKEY_CURRENT_USER /軟件/微軟/在Windows/CURRENTVERSION /瀏覽器/ FileExts

或者你可以嘗試運行

System.Diagnostics.Process.Start(path); 

這將始終使用默認的程序。或者在需要時顯示打開對話框(當沒有默認程序關聯時)