【问题标题】:C# WPF Debug start exe from external associated fileC# WPF Debug 从外部关联文件启动 exe
【发布时间】:2019-09-25 15:41:52
【问题描述】:

尝试调试通过打开与打开正在调试的应用程序相关联的文本文件打开的应用程序。 有没有办法在没有“启动外部程序”启动操作的情况下启动调试并等待应用程序被调用?

最终我试图获取打开应用程序的文本文件的文件信息,以便它可以在应用程序中用作“保存的项目”文件。

我有一个名为“myFile.cats”的文本文件,我已将这个文件扩展名与调试箱中的 Visual Studio 应用程序创建的可执行解决方案关联起来。

我尝试过使用 StartupEventArgs,但它显然没有返回任何内容,因为它不是从外部文件调用的。所以我似乎没有办法测试它以确保它有效......

任何帮助将不胜感激。

using Caliburn.Micro;
using ApplicationWPFUI.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using ApplicationLibrary;

namespace ApplicationWPFUI
{
    public class Bootstrapper : BootstrapperBase
    {
        public Bootstrapper()
        {
            Initialize();
        }
        //myFile.cats File opens this exe and the 'OnStartup' runs, where is the myFile.cats information being passed in?
        protected override void OnStartup(object sender, StartupEventArgs e)
        {
            if (e.Args.Count() != 0)
            {
                //Save the startupEventArgs to a variable
                GlobalConfigs.FileList.Files = e.Args.ToList();
            }
            DisplayRootViewFor<MainViewModel>();
        }
    }
}

【问题讨论】:

  • 您将需要展示您最有可能在做什么(代码方面)、实际发生了什么(可能是一些屏幕截图)以及您打算做什么。读了几遍后,我不清楚你在这里描述的到底是什么。 minimal reproducible example 可能会有所帮助。
  • 我支持@gravity。很难理解您要做什么。如果我对您的理解正确,您想调试一些由于通过资源管理器触发某些文件关联而启动的应用程序。我过去所做的,可能不是最优雅的,是在应用程序的入口点放置一个睡眠。这让我有机会在睡眠结束之前附加一个调试器,并在感兴趣的区域设置一个断点。如果这是您所要求的;)
  • 我已经添加了一些代码,但我认为这不再比我已经拥有的更能解释了。我想我的第一个问题是,StartupEventArgs 是否包含初始化 Windows 文件关联的文件的信息,然后打开 C# WPF 应用程序?不过,有什么可以帮助我弄清楚的是,如何从使用“myFile.cats”文件启动我的应用程序开始进行调试?
  • 基本上,就像 Photoshop 是如何知道打开 .psd 文件的?它如何知道 .psd 文件路径和文件名在哪里。双击这个“file.psd”,然后在 photoshop 中打开该文件?

标签: c# wpf visual-studio visual-studio-debugging


【解决方案1】:

我已经正确地做这件事了,需要做一点细微的改变。 打开应用程序的文件所需的信息在GlobalConfigs.FileList.Files = e.Args.ToList(); 中。但是,我只需要该列表中的第一个变量。

所以调用以下方法就可以了:

GlobalConfigs.FileList.Files = e.Args[0].ToString();

显然,StartupEventArgs 中并不总是有信息,因为我将自己调用应用程序并使用相关文件打开它。所以我只是把它包装在一个 if 语句中:

if (e.Args.Count() != 0) { 
    GlobalConfigs.FileList.File = e.Args[0].ToString();
}

还有鲍勃你的叔叔。

【讨论】:

    猜你喜欢
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多