如果没有程序可以打开文件,则捕获打开文件
本文关键字:文件 程序 如果没有 | 更新日期: 2023-09-27 18:14:21
我的代码
var info = new ProcessStartInfo(path);
info.WorkingDirectory = path;
info.WindowStyle = ProcessWindowStyle.Maximized;
var p = Process.Start(info);
它将打开一个文件(.pdf,但稍后可能是另一种类型的文件)在某些情况下,没有安装打开它的程序,所以它会显示windows消息
Windows无法打开此文件
并让我搜索一些程序来打开它。
我怎样才能避免这种情况?我想展示另一条信息。在try/catch
中,它不会抛出任何类型的异常,所以它不起作用。
我试过了,如果只有。pdf来检测是否有任何程序安装在这个
var key = Registry.ClassesRoot.OpenSubKey(".pdf");
if(key != null)
// Not installed!
但它不起作用。我得到了一个密钥,但我已经卸载了Foxit阅读器(我也使用CCleaner来删除冲突密钥,但仍然有。pdf密钥)
请帮
您可以使用FindExecutable() API, 但是被检查的文件必须实际存在:
[System.Runtime.InteropServices.DllImport("shell32.dll")]
static extern IntPtr FindExecutable(string lpFile, string lpDirectory, StringBuilder lpResult);
private void Button1_Click(System.Object sender, System.EventArgs e)
{
string path = @"C:'Users'Mike'Documents'SomeFile.xyz";
string EXE = GetAssociatedExecutable(path);
if (!string.IsNullOrEmpty(EXE))
{
MessageBox.Show(EXE, "Associated Executable");
}
else
{
MessageBox.Show("No Asssociated Executable for: " + path);
}
}
private string GetAssociatedExecutable(string filename)
{
const int MAX_PATH = 260;
if (System.IO.File.Exists(filename))
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(MAX_PATH);
FindExecutable(filename, null, sb);
if (sb.Length > 0)
{
return sb.ToString();
}
}
return "";
}