相关疑难解决方法(0)

查找在Windows上打开特定文件类型的默认应用程序

我正在使用C#开发一个面向.NET Framework 2.0的应用程序,我需要能够找到用于打开特定文件类型的默认应用程序.

我知道,例如,如果您只想使用该应用程序打开文件,您可以使用以下内容:

System.Diagnostics.Process.Start( "C:\...\...\myfile.html" );
Run Code Online (Sandbox Code Playgroud)

在默认浏览器中打开HTML文档,或

System.Diagnostics.Process.Start( "C:\...\...\myfile.txt" );
Run Code Online (Sandbox Code Playgroud)

在默认文本编辑器中打开文本文件.

但是,我希望能够在默认文本编辑器中打开不一定具有.txt扩展名的文件(例如),因此我需要能够找到打开的默认应用程序. txt文件,这将允许我直接调用它.

我猜测有一些Win32 API,我需要P/Invoke才能做到这一点,但是对谷歌和MSDN的快速浏览并没有发现任何有趣的东西; 我确实找到了大量完全不相关的页面,但没有像我在寻找的那样.

.net c# windows file-type

52
推荐指数
4
解决办法
4万
查看次数

Windows如何知道.sln文件与哪个版本的Visual Studio相关?

如果我有一个VS 2005解决方案,那么它会显示为"Version:Visual Studio 2005".如果我有一个VS 2010解决方案,则sln文件显示为与此相关.

它们都有.sln后缀.那么Windows如何知道用哪个版本的VS打开它呢?

windows visual-studio

17
推荐指数
1
解决办法
4436
查看次数

如何使用Delphi获取与文件扩展名相关联的程序名称?

我需要获取当前与当前用户的文件扩展名相关联的程序的名称.如果右键单击文件并选择属性,那么我需要的是"打开方式"行右侧的程序名称.

例如,对于".xls",我希望能够得到答案"Microsoft Office Excel",或者用户拥有的任何程序作为打开.xls文件的默认程序.

我已经确定它并不像进入HKEY_CLASSES_ROOT并选择它那么容易,因为它也可以在HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER或HKEY_USERS中指定.

也许我需要知道的是Windows用来确定这个以及如何到达每个位置的啄食顺序.当然,执行此操作的Windows API调用将是理想的.

这是一个类似的问题: 如何使用Delphi从文件扩展名获取图标和描述?但是这个问题只回答了如何获得扩展的描述和相关程序的图标.我找不到扩展它的方法来获取相关程序的名称.

我正在使用Delphi 2009,需要一个适用于Windows XP,Vista和7的解决方案.


谢谢大家的答案.

我认为可执行文件的名称毕竟不在注册表中.在广泛浏览了将提供名称的Windows API之后,我找不到一个.

我认为Mef的答案是最好的.从程序可执行文件中包含的信息中获取可执行文件的名称.

windows delphi registry file-type file-association

9
推荐指数
4
解决办法
1万
查看次数

在默认图像查看器中打开和关闭图像

我正在尝试创建一个在默认图像查看器中打开图像的简短方法,并在time几毫秒后关闭它.

现在它看起来像这样:

    public static async void OpenImage(string path, int time)
    {
        var process = new Process();
        process.StartInfo.FileName = path;
        process.Start();
        await Task.Delay(time);
        process.Kill()
        process.Close()
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到图像,但随后process.Kill()抛出InvalidOperationException"没有进程与此对象相关联".

我错过了什么或者还有其他办法吗?


更新:

现在也测试了这个:

    public static async void OpenImage(string path, int time)
    {
        var process = Process.Start(path)
        await Task.Delay(time);
        process.Kill()
        process.Close()
    }
Run Code Online (Sandbox Code Playgroud)

但后来Process.Start()回归null.所以也许我必须.exe直接打电话给faljbour评论?

c# process

0
推荐指数
1
解决办法
3464
查看次数