使用默认应用程序和参数的C#打开文件


103

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

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

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

我知道如何创建新流程并设置参数,但是通过这种方式,我需要指出应用程序的路径,并且我希望拥有一个可移植的应用程序,而不必每次都设置应用程序的路径我在其他计算机上使用该应用程序。我的想法是,我希望计算机已安装pdf阅读器,并且只说打开页面的内容。

谢谢。


您的意思是将参数发送到Adobe可执行文件而不是pdf文件,但不使用完整路径吗?
巴厘岛C

2
您如何期望它起作用?如果您不知道应用程序的路径,则不知道哪个是默认的PDF查看器,也不知道要使用哪种参数格式。
ken2k 2012年

2
myProcess.StartInfo.FileName = "Acrobat.exe";如果不给出应用程序的完整路径,那还不够吗?
daniloquio 2012年

1
看看这个SO问题会有所帮助
Mark Hall

2
@daniloquio:我认为关键是OP不知道最终用户在他/她的计算机上安装了什么文件来读取Adobe文件,可能是Acrobat,Acrobat Reader或其他东西。
Surfbutler

Answers:


43

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

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


您可以这样做,而无需告知完整的Acrobat路径,如下所示:

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。

请遵循此问题以获取有关执行此操作的详细信息:查找用于在Windows上打开特定文件类型的默认应用程序


2
+1另外,我认为可以在注册表中查找与任何文件类型(例如“ .pdf”)关联的应用程序,然后将该名称放入filename参数中。见stackoverflow.com/questions/162331/...
Surfbutler

是否有一些打开参数可以使Adobe Reader在2页视图中打开?只是好奇,如果有人知道,那将是真正有用的。我一直在环顾四周,但找不到任何东西。
塔基·马蒂略

18

这应该很接近!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}

1
那很完美 !
弗朗索瓦·吉拉德

1
这为我使用默认程序打开PDF的工作。谢谢!
Smitty-Werben-Jager-Manjenson,

1
@imgen问题是关于提供页码作为参数。这个答案可以解决吗?
daniloquio

1
@daniloquio对不起,我对这个问题的理解不够深。
imgen

2
不要忘记将其包装在using块中,Process是IDisposable的。
勒内Carannante

7

我将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上打开特定文件类型



-5

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

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

更新:在下面的评论之后

  1. 右键+单击项目
  2. 新增项目
  3. 在Visual C#项下->常规
  4. 选择设置文件

14
选项卡错误?;)
ken2k 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.