C# C“如果我使用”WPF应用程序会自动崩溃;以“打开”;

C# C“如果我使用”WPF应用程序会自动崩溃;以“打开”;,c#,wpf,command-line-arguments,open-with,C#,Wpf,Command Line Arguments,Open With,我正在用C#WPF制作一个文本编辑器。将项目发布到文件夹后,我可以双击.exe,它运行正常,并且我可以使用我的Open(CTRL+O)功能完美地加载文件 我想使用打开方式>选择其他应用程序>更多应用程序>在此电脑上查找其他应用程序 (我还不担心文件关联——在开发过程中,这很好) 问题是——无论我对代码做什么,当我使用此方法打开应用程序时,我都无法让它做任何有用的事情。发生的情况是,它会弹出一个随机大小的白色窗口,看起来很忙——2秒钟后它会自动关闭。窗口的名称是“%PathOfTheFileIOp

我正在用C#WPF制作一个文本编辑器。将项目发布到文件夹后,我可以双击.exe,它运行正常,并且我可以使用我的Open(CTRL+O)功能完美地加载文件

我想使用打开方式>选择其他应用程序>更多应用程序>在此电脑上查找其他应用程序 (我还不担心文件关联——在开发过程中,这很好)

问题是——无论我对代码做什么,当我使用此方法打开应用程序时,我都无法让它做任何有用的事情。发生的情况是,它会弹出一个随机大小的白色窗口,看起来很忙——2秒钟后它会自动关闭。窗口的名称是“%PathOfTheFileIOpened%-KuroNote”,这似乎是自动的

App.xaml

启动对象也被设置为应用程序


我认为这可能与权限有关,但可执行文件和要打开的文件从来都不在仅限管理员保护的区域中

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

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



这是一个纯粹的离线应用程序,不是一个web应用程序,我发布后得到的文件只是“KuroNote.deps.json”、“KuroNote.dll”、“KuroNote.exe”、“KuroNote.pdb”和“KuroNote.runtimeconfig.json”,没有“.application”文件,听起来像是“ClickOnce”使用的。如果我在VisualStudio中搜索“ClickOnce”,它会说我可以安装它,但听起来好像它还没有安装。除非我需要禁用某些隐藏的“使用ClickOnce”设置?

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

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

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

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


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

尝试添加一个Try/catch,调试它,看看是否抛出异常。嗨@BrettWertz,不幸的是,这似乎没有改变任何事情。它甚至没有显示上面看到的“test”消息框,这是启动方法中的第一行代码。。。这是一个纯粹的离线应用程序,不是一个web应用程序,我发布后得到的文件只是“KuroNote.deps.json”、“KuroNote.dll”、“KuroNote.exe”、“KuroNote.pdb”和“KuroNote.runtimeconfig.json”,没有“.application”文件,听起来像是“ClickOnce”使用的。如果我在VisualStudio中搜索“ClickOnce”,它会说我可以安装它,但听起来好像它还没有安装?或者我需要禁用某个隐藏的ClickOnce设置?您可以尝试以下操作:并查看net core 3.1中的事件日志。ClickOnce?你在说什么?没有ClickOnce。。。
<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>
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);
            }
        }
    }
}