2

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

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

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

应用程序.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>

应用程序.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);
            }
        }
    }
}

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

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


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

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

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


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

4

1 回答 1

1

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

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

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

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

这又是与常识相冲突的那些沉默的 Windows 10 事物之一。

于 2020-08-06T13:59:02.087 回答