繁体   English   中英

C# WPF 如果我使用“打开方式”,应用程序会静默崩溃

[英]C# WPF App silently crashes if I use "open with"

我正在 C# WPF 中制作文本编辑器。 将项目发布到文件夹后,我可以双击.exe,它运行良好,并且可以使用我的 Open (CTRL+O) function 加载文件,非常好。

我想使用打开方式 > 选择另一个应用程序 > 更多应用程序 > 在这台 PC 上查找另一个应用程序(我还不担心文件关联 - 在开发过程中这很好)

这就是问题所在 - 无论我对我的代码做什么,当我使用这种方法打开它时,我都无法让我的应用程序做任何有用的事情。 发生的情况是它会弹出一个随机大小的白色 window 并且看起来很忙 - 2 秒后它会自行关闭。 window 的名字是“%PathOfTheFileIOpened% - KuroNote”,好像是自动的。

App.xaml

<Application x:Class="KuroNote.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:KuroNote"
             Startup="Application_Startup"
             ShutdownMode="OnMainWindowClose">
    <Application.Resources>
         
    </Application.Resources>
</Application>

App.xaml.cs

namespace KuroNote
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            MessageBox.Show("test");
            foreach (string s in e.Args)
            {
                MessageBox.Show(s);
            }
        }
    }
}

正如你所看到的,我删除了所有有用的代码来尝试让它做一些事情——我什至没有打开主要的 window,我只是想要它到 output 它的命令行 ZDBC11CAA5BDA99F77E6FB4DABD882E7 当我使用“在这台 PC 上查找另一个应用程序”方法时,我什至没有看到“测试”消息框,就像你在上面看到的那样。

这个项目属性的截图中可以看到,启动 object 也被设置为应用程序。


我认为这可能与权限相关,但可执行文件和要打开的文件永远不会在受保护的管理员区域中。

我之前在调试时做过测试,检索在项目属性>调试选项卡>“应用程序 arguments:”中设置的命令行 arguments,这些都返回得很好。 使用“在这台 PC 上查找另一个应用程序”方法打开似乎有些不同,就像它不仅仅是使用带有文件路径的命令行参数启动应用程序。

我是否在 App.xaml 中缺少某种启用“打开方式”功能的标志?


是纯离线应用,不是web应用,而且我发布后得到的文件只有“KuroNote.deps.json”、“KuroNote.dll”、“KuroNote.exe”、“KuroNote.pdb”和“KuroNote.runtimeconfig” .json”,没有听起来像“ClickOnce”使用的“.application”文件。 如果我在 Visual Studio 中搜索“ClickOnce”,它说我可以安装它,但听起来不像已经安装了。 除非我需要禁用一些隐藏的“使用 ClickOnce”设置?

事实证明,Windows 10 使用某种缓存来实现“打开方式...”功能。

所以我上面的代码看起来没有执行的原因是因为它实际上没有执行 - 它实际上每次都在执行相同的旧版本代码(其中包含某种错误)。

如果您使用指定的.exe 打开文件(例如文本文件),则该指定的.exe 文件名(以及可能的程序集信息(例如版本号))将存储在缓存中。 下次您打开具有相同的指定 .exe 文件名(和程序集信息)的文件(例如文本文件)时,您选择的确切文件 - 指定的 .exe 文件路径将不会实际执行。 相反,它将执行您第一次“打开方式”时使用的相同.exe。 请记住,每次我们主动浏览文件时,而不是从“打开方式”列表中进行选择。

强制 Windows 10 使用您每次使用“打开方式...”(并主动浏览文件)时指定的exact.exe的一种简单方法是将.exe文件重命名为尚未使用的名称前。 我还没有测试只更改程序集信息,所以我不确定这是否有效。

这又是与常识相冲突的 10 件沉默的事情之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM