2010-01-02 95 views
2

我需要播放PowerPoint幻灯片,但首先我想检查PowerPoint或查看器是否安装在机器上。我怎样才能使用.NET?如何检查机器上是否安装了PowerPoint或点阅读器?

+0

你的意思是包括可以打开powerpoint的开放式办公室或其他程序吗? – 2010-01-02 10:10:52

+0

你喜欢asp.net还是c#.net给出明确的信息 – ratty 2010-01-02 10:24:37

回答

6

这取决于您是否试图判断您是否可以查看演示文稿(* .ppt,* .pptx等)或是否可以访问PowerPoint对象模型。

要检查是否有PPT文件相关的处理,你可以做到以下几点:

// using Microsoft.Win32; 
private bool CheckPowerPointAssociation() { 
    var key = Registry.ClassesRoot.OpenSubKey(".ppt", false); 
    if (key != null) { 
     key.Close(); 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

if (CheckPowerPointAssociation()) { 
    Process.Start(pathToPPT); 
} 

要检查的PowerPoint COM对象模型是否可用,您可以检查以下注册表项。

// using Microsoft.Win32; 
private bool CheckPowerPointAutomation() { 
    var key = Registry.ClassesRoot.OpenSubKey("PowerPoint.Application", false); 
    if (key != null) { 
     key.Close(); 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

if (CheckPowerPointAutomation()) { 
    var powerPointApp = new Microsoft.Office.Interop.PowerPoint.Application(); 
    .... 
} 

但是,请注意,在这两种情况下,它只会给你一个很好的指示PowerPoint的可用性。例如,卸载可能没有完全删除所有的痕迹。另外,根据我的经验,销售Outlook插件多年来,我看到某些防病毒程序会干扰COM对象模型,以防止恶意脚本的攻击。所以在任何情况下,都要有可靠的错误处理。

希望这会有所帮助!

+0

事情随Office 2013发生了变化。如果用户从未安装过以前版本的Office,则该注册表项是PowerPoint 2013的“PowerPoint.Application.15”。我现在仍然在寻找解决此问题的良好解决方案,即Microsoft更改了注册表项名称。 – 2014-09-30 15:05:45

+0

虽然我没有一个“干净”的系统来验证,但我只是说这似乎不太可能。总是存在特定于版本的ProgID(即PowerPoint.Application.15)和非特定于版本的ProgID(PowerPoint.Application),它们都指向相同的CLSID。 – Josh 2014-10-01 20:29:40

+0

或许。我支持我们产品的使用者,他与我分享他的屏幕,以便我可以自己检查他的注册表。我们的测试看PPT是否安装失败,因为没有“PowerPoint.Application”键。该用户似乎没有将他的Office注册表条目弄乱的类型。我很想知道我错了。 – 2014-10-02 21:41:27

0

我不确定这是做到这一点的正确方法。但你可以使用这个

try 
{ 
    //It will throw a WIN32 Exception if there is no associated 
    //application available to open the file. 
    Process p = Process.Start("C:\\Sample.pptx"); 
} 
catch (Win32Exception ex) 
{ 
    MessageBox.Show("Powerpoint or Powerpoint viewer not installed\n"); 
} 
+3

我认为在引发错误时构建你的逻辑并不是最好的解决方案。 – 2010-01-02 10:18:43

+1

我同意你的意见。 – Anuraj 2010-01-02 10:20:09

0

怎么样检查EXE文件的PowerPoint或PowerPoint查看器是否存在或不使用System.io命名空间的“存在方法”?

检查this

+0

它会工作吗?因为用户可以在他系统中的任何地方安装应用程序。 – Anuraj 2010-01-02 10:26:23

1

HKEY_CLASSES_ROOT \ MSPowerPoint \协议\ StdFileEditing \服务器

这关键是PowerPoint和点到安装目录为可执行文件运行PowerPoint都安装相同。在检测此产品是否已安装时非常适用,并且在安装未使用默认设置时很适合计算安装Office产品的文件夹。

+0

事情随Office 2013发生了变化。似乎如果用户从未安装Office的以前版本,则注册表项是“ms-powerpoint”而不是“MSPowerPoint”。 – 2014-09-30 15:08:18