【问题标题】:Associate a file extension with WPF application将文件扩展名与 WPF 应用程序关联
【发布时间】:2019-05-28 02:05:25
【问题描述】:

我有一个不错的小任务管理器,我想添加一个备份选项。但我不希望它在普通的 xml 文件或其他文件中,因为文件损坏的可能性。那么如何制作程序知道的文件扩展名,并且可以保存并使用 .asog 文件扩展名打开呢?

【问题讨论】:

标签: c# wpf file-extension


【解决方案1】:

试试这个:
How does Vista generate the icon for documents associated to my application?

接受的答案解释了图标文件关联。

您的应用使用 WPF 并不重要。文件关联并不关心您的应用使用什么 GUI 框架。

【讨论】:

    【解决方案2】:

    如果您想将扩展名为 (.magi) 的文件与您的 WPF 应用程序相关联,我建议您使用 InnoSetup 来执行此操作。

    例如,我开发了一个名为 MAGI 的 WPF 应用程序。我们将图标与“.magi”文件相关联,当用户点击“.magi”文件时,它会启动应用程序并直接在应用程序中打开它。


    使用 InnoSetup 轻松修改注册表

    只需在您的 iss 文件中添加此指令即可:

    [Setup]
    ChangesAssociations=yes
    
    [Registry]
    Root: HKCR; Subkey: ".magi"; ValueType: string; ValueName: ""; ValueData: "MyMAGIApplication"; Flags: uninsdeletevalue
    Root: HKCR; Subkey: "MyMAGIApplication"; ValueType: string; ValueName: ""; ValueData: "Program MAGI"; Flags: uninsdeletekey
    Root: HKCR; Subkey: "MyMAGIApplication\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\MAGI.EXE,0"
    Root: HKCR; Subkey: "MyMAGIApplication\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\MAGI.EXE"" ""%1"""
    

    解析“启动”方法中的参数

    我们在主 Xaml 中使用 Startup 属性,以便像调用有用的 main 方法一样调用您的解析器。

    <Application x:Class="MAGI.View.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             Startup="AppStartupMainMagi" >
    </Application>
    

    在代码隐藏中我们添加了这个方法

    /// <summary>
    /// Call with Startup property in App.xaml
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void AppStartupMainMAGI(object sender, StartupEventArgs e)
    {
        String[] arguments = Environment.GetCommandLineArgs();
    
        if (arguments.GetLength(0) > 1)
        {
            if (arguments[1].EndsWith(".magi"))
            {
                string filePathFormMainArgs = arguments[1];
                if(isFileMagiValid(filePathFormMainArgs)) 
                {
                    // Step 1 : deserialize filePathFormMainArgs
                    // Step 2 : call the view "File oepn" in the application"
                }
            }
        }
        else {
            // Call the view "welcome page application"
        }
    }
    

    【讨论】:

    • 试过了,它工作正常,但应用程序崩溃了,因为内容文件夹访问被拒绝!。如何从内容文件夹中获取图标、图像等项目?
    【解决方案3】:

    您可以使用安装项目或 ClickOnce 安装添加文件扩展名。设置完成后,用户可以双击 .asog 文件,然后您的应用程序将被调用,文件名作为 main 参数数组中的第一个条目。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      相关资源
      最近更新 更多