You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取应用路径时触发System.ComponentModel.Win32Exception异常如何解决

异常产生原因
  • 最核心的常见原因:库项目中Utilities\app.exe的文件属性未设置复制到输出目录,编译后该文件没有被同步输出到主程序的运行目录,导致你拼接的路径下不存在目标文件。
  • 路径拼接不严谨:直接使用字符串拼接路径,在路径末尾自带分隔符、跨操作系统运行等特殊场景下,容易出现路径格式错误。
  • 单文件发布兼容问题:如果你使用的是.NET Core 3.0+ / .NET 5+的单文件发布模式,Assembly.GetExecutingAssembly().Location会返回空值,最终拼接出来的路径无效。
修复方案
  1. 首先配置文件复制规则:在你的库项目中找到Utilities文件夹下的app.exe,右键打开属性面板,将复制到输出目录选项设置为如果较新则复制,确保编译后文件会被输出到正确的路径下。
  2. 优化路径拼接逻辑,使用Path.Combine替代直接字符串拼接,同时兼容单文件发布场景:
static void Main(string[] args)
{
    // 优先取执行程序集目录,兼容单文件发布场景回退到AppContext基目录
    string assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    if (string.IsNullOrEmpty(assemblyDir))
    {
        assemblyDir = AppContext.BaseDirectory;
    }
    string consoleApp = Path.Combine(assemblyDir, "Utilities", "app.exe");
    
    // 提前校验文件是否存在,避免抛出系统级异常方便排查
    if (!File.Exists(consoleApp))
    {
        Console.WriteLine($"目标应用不存在,路径:{consoleApp}");
        return;
    }

    // 注意:此处参数你当前传的是app.exe自身的路径,确认是否符合业务逻辑,如需传入其他参数自行修改
    string param = string.Format("-v quiet \"{0}\"", consoleApp);
    ProcessStartInfo pi = new ProcessStartInfo(consoleApp, param)
    {
        // 显式设置工作目录,避免部分场景下工作目录异常导致的依赖加载问题
        WorkingDirectory = Path.GetDirectoryName(consoleApp),
        UseShellExecute = false
    };

    Process mProcess = Process.Start(pi);
    Console.WriteLine(pi);
}
  1. 如果上述操作后还是报错,可以打印出拼接得到的consoleApp路径,手动检查该路径下是否真的存在app.exe文件,排查是否有编译输出目录配置错误的问题。

内容的提问来源于stack exchange,提问作者Rabner Casandara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:24:03