PowerShell实现查询打开某个文件的默认应用程序

许多文件扩展名和一个可执行应用程序绑定。正因为这样你才可以使用Invoke-Item打开一个文档。

要找出一个给定后缀名的文件是由那个默认引用程序打开它,并不麻烦。我们可以使用Windows系统中的注册表,自行编程解决。但是在扫描注册表时,要稍微留意一下32位和64位机器的问题,这不是本文重点,点到为止。

另外一种途径,稍显旁门左道,调用Windows API。下面的例子会演示如何调用。采取这种途径最大的优势是借力于操作系统。而你的付出成本只是用C#代码间接调用Windows API中的函数而已:

$Source = @"

using System;
using System.Text;
using System.Runtime.InteropServices;
public class Win32API
  {
    [DllImport("shell32.dll", EntryPoint="FindExecutable")]

    public static extern long FindExecutableA(string lpFile, string lpDirectory, StringBuilder lpResult);

    public static string FindExecutable(string pv_strFilename)
    {
      StringBuilder objResultBuffer = new StringBuilder(1024);
      long lngResult = 0;

      lngResult = FindExecutableA(pv_strFilename, string.Empty, objResultBuffer);

      if(lngResult >= 32)
      {
        return objResultBuffer.ToString();
      }

      return string.Format("Error: ({0})", lngResult);
    }
  }

"@

Add-Type -TypeDefinition $Source -ErrorAction SilentlyContinue

$FullName = 'c:\Windows\windowsupdate.log'
$Executable = [Win32API]::FindExecutable($FullName)

"$FullName will be launched by $Executable"

唯一有个限制,就是FindExecutable()需要检查的文件是存在的,你不能只用文件扩展名去请求。

另外@reidca反馈说该方法不能检测MMC加载项打开的文件,比如cer和pfx证书文件,程序会崩溃。

(0)

相关推荐

  • PowerShell实现查询打开某个文件的默认应用程序

    许多文件扩展名和一个可执行应用程序绑定.正因为这样你才可以使用Invoke-Item打开一个文档. 要找出一个给定后缀名的文件是由那个默认引用程序打开它,并不麻烦.我们可以使用Windows系统中的注册表,自行编程解决.但是在扫描注册表时,要稍微留意一下32位和64位机器的问题,这不是本文重点,点到为止. 另外一种途径,稍显旁门左道,调用Windows API.下面的例子会演示如何调用.采取这种途径最大的优势是借力于操作系统.而你的付出成本只是用C#代码间接调用Windows API中的函数而已

  • PowerShell一次打开多个文件的方法

    有时候,我们想通过PowerShell脚本一次性打开多个文件,尤其是相同后缀名的所有文件.我们来写一个函数,函数名为Open-File,通过传递一个*.后缀给此函数,实现一次性打开所有的此后缀的文件. 复制代码 代码如下: Function Open-File{    param(        [Parameter(Mandatory=$true)]        $path    )    $paths = Resolve-Path $path -ea SilentlyContinue   

  • Eclipse设定文件的默认打开方式的具体操作步骤

    最近在学习android, 需要经常打开xml文件. 所以想修改默认其打开方式. 解决方法: 设置默认打开方式为XML Editor. 菜单:Window   ->   Preferences   ->   General   ->   Editors   ->   File   Associations File   types:   *.xml Associated   editors:   XML Editor***  ->   Default 在Associated 

  • pycharm修改文件的默认打开方式的步骤

    有时我们用pycharm打开某个文件的时候,默认的打开方式是不正确的,那么如何设置呢?下面小编给大家分享一下. 首先我们点击File菜单,然后选择Setting,如下图所示 接着找到Editor下面的File Types,如下图所示 然后选择一个文件类型,就可以看到它下面关联的文件后缀了,如下图所示 接着我们只需要把要改的文件后缀选择移除掉 然后在选择一个新的文件类型,将后缀添加进去 最后直接输入后缀名就可以了,如下图所示 综上所述,pycharm修改文件的默认打开方式就在settings下面的

  • 什么是ASP?如何打开ASP文件

    ASP是基于WEB的一种编程技术,可以说是CGI的一种.它可以完成以往CGI程序的所有功能,如计数器.留言簿.公告板.聊天室等等.ASP可以轻松地实现对页面内容的动态控制,根据不同的浏览者,显示不同的页面内容.而浏览者一点觉察不出来,就像为他专门制作的页面一样.使用各种各样的组件,ASP可以完成无比强大的功能.使用FileSystemObject,可以对服务器上的文件进行操作,浏览.复制.移动.删除等.有ADO(Active Database Object,动态数据库对象)的支持,ASP对数据库

  • Append打开指定文件夹中的数据文件就象这些文件在当前文件夹中一样

    允许程序打开指定文件夹中的数据文件就象这些文件在当前文件夹中一样.如果在没有参数的情况下使用,则 append 命令显示附加的目录列表. 语法 append [;] [[Drive:]Path[;...]][/x:{on|off}][/path:{on|off}] [/e] 参数 取消附加文件夹列表. [Drive:}Path 指定要附加到当前文件夹的驱动器和文件夹.如果未指定驱动器,将默认使用当前驱动器.可以指定 [Drive:]Path 的多个项,各项之间要用分号隔开. /x:{on | o

  • SQL Server附加数据库报错无法打开物理文件,操作系统错误5的图文解决教程

    问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf和ldf文件,本演示以ldf为例. 1.点击文件右键属性-->安全-->编辑 2.编辑-->添加 3.添加-->高级 4.高级-->立即查找-->搜索结果中找到-->Everyone-->确定-->确定 5.确定-->默认选中的Everyone用户-->

  • c#打开py文件的方法

    每个编程语言都有它的优势,那么我们如何在一个语言中使用其他编程语言的代码,并完成工作呢?今天我就用C#打开py文件,不调用py的方法.程序执行的效果如下图 1.在百度上搜索"ironpython官网",选择ironpython. 2.进入官网后选择Download下载,下载资源. 3.选择要下载的文件,下载到本地磁盘.我存储在了F盘下的迅雷下载. 4.下载完成,在我们存储的路径中找到刚下载的文件,单击打开,进入安装向导界面. 5.同意上面的文件. 6.设置软件安装的位置,这里我就使用了

  • 怎样打开XML文件?xml文件如何打开?

    可扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输.XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. 格式特性 XML与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引.排序.查

  • Powershell获取图片名字、文件夹及拍摄时间的例子

    如果你想要整理你的图片档案,这里有一段代码它能从图片文件获取相关的拍摄信息. 这个例子使用一个系统函数获得"我的图片"的路径,接着从其目录和子目录查询所有的文件.获得的结果通过管道符传递给函数Get-DateTaken,它将返回这些图片的名字.文件夹及照片的拍摄日期. 复制代码 代码如下: function Get-DateTaken{  param  (    [Parameter(ValueFromPipeline=$true, ValueFromPipelineByPropert

随机推荐