131

使用默认应用程序打开文件的最简单方法是:

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

但是,我想知道是否存在将参数设置为默认应用程序的方法,因为我想以确定的页码打开 pdf。

我知道如何创建一个新进程并设置参数,但是这样我需要指明应用程序的路径,并且我希望有一个可移植的应用程序,而不必每次都设置应用程序的路径我在其他计算机上使用该应用程序。我的想法是,我希望计算机已经安装了 pdf 阅读器,并且只说要打开什么页面。

谢谢。

4

5 回答 5

59

如果您希望使用默认应用程序打开文件,我的意思是不指定 Acrobat 或 Reader,则无法在指定页面中打开文件。

另一方面,如果您可以指定 Acrobat 或 Reader,请继续阅读:


您可以在不告知完整 Acrobat 路径的情况下执行此操作,如下所示:

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

如果您不想使用 Reader 而是使用 Acrobat 打开 pdf,请像这样更改第二行:

myProcess.StartInfo.FileName = "Acrobat.exe";

您可以查询注册表以识别打开 pdf 文件的默认应用程序,然后相应地在进程的 StartInfo 上定义 FileName。

请按照此问题了解有关执行此操作的详细信息:Finding the default application for opening a specific file type on Windows

于 2012-07-06T16:25:25.393 回答
49

这应该很接近!

public static void OpenWithDefaultProgram(string path)
{
    using Process fileopener = new Process();

    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}
于 2019-01-20T09:27:27.627 回答
8

我将xsl链接的博文中的VB代码转换为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 上打开特定文件类型的默认应用程序

于 2013-07-21T14:47:11.077 回答
2

你可以试试

Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();
于 2012-07-06T16:18:48.440 回答
-6

请在项目的属性下添加设置并以这种方式使用它们,您可以获得干净且易于配置的设置,可以将其配置为默认设置

如何:在设计时创建新设置

更新:在下面的评论之后

  1. 右键 + 单击项目
  2. 添加新项目
  3. 在 Visual C# 项下 -> 常规
  4. 选择设置文件
于 2012-07-06T16:24:34.680 回答