在我们的应用程序中单击按钮时,它会将文件从服务器下载到客户端并打开它以供用户查看。我们允许用户选择要打开该文件的应用程序,但标准框提供“始终使用所选程序打开此类文件”选项。不幸的是,勾选这个没有区别,并且.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);
}
非常感谢
科林
答案 0 :(得分:0)
这是一个代码片段,用于调用Windows的 Open with ... 对话框,
除非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();
}
答案 1 :(得分:0)
有一个肮脏的黑客,但我不知道你是否会喜欢它:) 您可以在每次调用CoreUtilities.ShowOpenFileDialog()之前删除注册表中存储的assoc。 这是注册表中的路径
HKEY_CURRENT_USER /软件/微软/在Windows / CURRENTVERSION /浏览器/ FileExts
或者您可以尝试运行
System.Diagnostics.Process.Start(path);
这将始终使用默认程序。或者在需要时显示打开对话框(当没有关联的默认程序时)
答案 2 :(得分:-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一样,它将在记事本中打开。