WPF;单击一次;双击文件启动;对比2008年

2023-12-13

我的应用程序仅供我和同事使用,因此我不在乎它是 Click-Once 还是复制 exe。我希望能够在 Windows 资源管理器中单击具有给定扩展名的文件,然后启动我的程序并打开该文件。我无法让它捕获文件名。

表面上的解决方案:

Link

我正在尝试的代码如下,此时我要做的就是将单击的文件的名称放入文本框中。我怀疑我的相关无知是关于如何从 Windows 资源管理器引用单击一次应用程序。当我构建时,我最终会得到一个名为 setup.exe 的文件,一个名为 Wis.application 的文件,当我单击“setup”来安装它时,我最终会在“中得到一个类型为“单击一次应用程序引用”的快捷方式C:\Users\ptom\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Wis”。我尝试将文件与安装创建的快捷方式关联,并将文件与 setup.exe 关联。当我单击该文件时,应用程序启动,但指出 AppDomain.CurrentDomain.SetupInformation.ActivationArguments 为空。 (“指示”是指文本框被填充为我测试的文本,以查看它是否为空)。如果我从调试运行该应用程序,或者只是从开始菜单运行它,它会执行我所期望的操作,遵循指示 ActivationArguments 不为空,但其 ActivationData (string[]) 长度的代码路径0。

这是来自 app.xaml.cs 的代码

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace Wis
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {

            // Check if this was launched by double-clicking a doc. If so, use that as the

            // startup file name.
            if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments == null)
            {
                this.Properties["DoubleClickedFileToLoad"] = "There were no activation arguments AGAIN";
            }
            else
            {
                if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null
                                   && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0)
                {
                    this.Properties["DoubleClickedFileToLoad"] =
                    AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0];
                }
                else
                {
                    this.Properties["DoubleClickedFileToLoad"] = "Type in a file name";
                }
            }


        }
    }
}
            

Thanks


首先,您应该为 ClickOnce-publish 添加文件关联(选择项目->属性->发布选项->文件关联)
然后添加引用“系统部署"
然后,您可以根据启动类型(ClickOnce 或 Local)以这种方式提取 App.cs 中的路径

    protected override void OnStartup(System.Windows.StartupEventArgs e)
    {
        var path = GetPath (e);
    }        

    private static string GetPath(StartupEventArgs e)
    {
        if (!ApplicationDeployment.IsNetworkDeployed)
            return e.Args.Length != 0 ? e.Args[0] : null;
        if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments == null)
            return null;
        var args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
        return args == null || args.Length == 0 ? null : new Uri(args[0]).LocalPath;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF;单击一次;双击文件启动;对比2008年 的相关文章

随机推荐

  • 检查启动条件

    我想测试 ASP Net Core 2 0 应用程序启动时的某些条件 例如 如果我的数据库服务器或其他服务器运行正常 这对于仅在请求后才会实例化的事物 例如我的存储库 特别有用 目前我必须手动执行此请求 但我希望我的应用程序尽早失败 建议在
  • GotW #101“解决方案”真的能解决任何问题吗?

    首先阅读 Herb 的 Sutters GotW 帖子 内容涉及 C 11 中的 pimpl GotW 100 编译防火墙 难度 6 10 GotW 101 编译防火墙 第 2 部分 难度 8 10 我在理解 GotW 101 中提出的解决
  • 有没有办法在 JavaScript 对象文字中使用变量键?

    我有这样的代码 var key anything var object key key attribute 我想知道是否有办法替代key与 任何东西 like var object anything key attribute 在 ES6
  • 使用 pygame.mixer.music.get_endevent()

    我想要一个tkinter声音效果完成后不显示任何内容的标签 我一直在研究如何创建 初始化 捕捉音乐事件的结束 但没有运气 def play btn if mixer music get busy mixer music fadeout 10
  • Pandas 向量化函数 cumsum 与 numpy

    回答问题的同时Pandas Dataframe 的向量化计算 我注意到一个关于性能的有趣问题 我的印象是诸如df min df mean df cumsum 等被矢量化 然而 我发现两者之间的性能存在巨大差异df cumsum and a
  • Python 3 mySQL.connector 冻结导入库

    我是 Python 3 的新手 仍在学习 但我需要帮助 脚本的第一部分是 import mysql connector this is failing as a py but works in the shell cnx mysql con
  • 按运输方式在感谢页面上添加自定义消息

    仅当订单使用免费送货时 我才尝试向已收到订单 谢谢 页面添加一条消息 该消息可以替换标准的 谢谢 消息 也可以作为补充 这是我正在使用的代码 它基于这里的答案 根据 WooCommerce 中的运输方式自定义订单接收页面 add messa
  • 如何在java中改变new Date()的值

    在我的应用程序中 当测试人员测试应用程序时 需要经常更改日期和时间 目前 我们必须使用系统命令 date s 来更改系统时间 但这会导致服务器上的其他应用程序也受到影响 我只想更改此应用程序的 Date 但我不想想要改变应用程序本身 因为有
  • Inno Setup 获取目录大小(包括子目录)

    我正在尝试编写一个返回目录大小的函数 我编写了以下代码 但它没有返回正确的大小 例如 当我在 pf 它返回 174 字节的目录 这显然是错误的 因为该目录的大小有多个千兆字节 这是我的代码 function GetDirSize DirNa
  • 如何从Python中的请求获取响应SSL证书?

    尝试从响应中获取 SSL 证书requests 有什么好的方法可以做到这一点 requests故意包装这样的低级内容 通常 您唯一想做的就是验证证书是否有效 为此 只需通过verify True 如果您想使用非标准 cacert 包 您也可
  • 根在函数中不起作用[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想在函数中使用matlab函数根 但这不起作用 我不知道如何解决这个问题 这是函数 f
  • 在 PyCharm 中使用 Matplotlib 时如何修复“无法找到或加载 Qt 平台插件窗口”

    在 PyCharm 中使用 matplotlib 时收到错误 无法找到或加载 Qt 平台插件窗口 我该如何解决这个问题 我在 Anaconda3 4 2 0 和 4 3 0 1 64 位 上遇到了同样的问题 当我尝试运行一个使用 matpl
  • 我想捕获一个异常并将其捆绑在我自己的异常中并向上抛出

    我有一个管理资源的类 它需要一个可以从路径检索资源的 Loader 类 Loader 是一个抽象基类 因此任何人都可以创建新的加载器 如果请求的资源不在缓存中 则资源管理器将从加载器请求该资源 如果加载器失败 资源管理器会抛出一个我创建的名
  • 根据服务器数据(纬度和经度)移动MKMapView中的注释

    在我的应用程序中 我通过以特定时间间隔从服务器获取其他人的位置 纬度和经度 来显示其他人的位置 获取后 我必须删除所有注释并根据服务器数据删除新注释 但它看起来效率很低 因为当我们先前存在同一用户的注释时 即使我删除并添加相同的用户注释 所
  • 如何修复 ASP.NET 开发服务器中的端口号

    昨天我正在编写一个独立的 html 网页 每次我查看它时 该文件都在本地主机中运行 因此 我的操作系统 Windows 8 分配了一个端口号 我的文件的路径如下所示 http localhost 2038 Projects test htm
  • M_PI 适用于 math.h,但不适用于 Visual Studio 中的 cmath

    我正在使用 Visual Studio 2010 我读过在 C 中最好使用
  • 如何启动具有标准 bash shell 环境的 java 进程?

    我尝试过研究进程构建器 但我不确定如何将 bash 环境引入到进程中 例如 我使用以下命令来启动我的流程 Process p new ProcessBuilder args start InputStream is p getInputSt
  • 从我的图书馆项目启动主项目的活动

    我有 2 个项目 一个是我的主项目 A 另一个是图书馆项目 B 我想从 B 中的活动启动 A 中的活动 我该怎么做 I Tried startActivity getApplicationContext B class but B clas
  • 我是否使用 GMFBridge.DLL 正确预览/捕获流?

    我正在尝试使用 GMFBuilder 以便我可以预览来自网络摄像头的流并定期保存它 而无需重新启动整个图表 然而 我不确定这是否正确 我试图遵循示例 但代码已更新 情况也发生了变化 我尝试创建 WEbcam gt Smart Tee pre
  • WPF;单击一次;双击文件启动;对比2008年

    我的应用程序仅供我和同事使用 因此我不在乎它是 Click Once 还是复制 exe 我希望能够在 Windows 资源管理器中单击具有给定扩展名的文件 然后启动我的程序并打开该文件 我无法让它捕获文件名 表面上的解决方案 Link 我正