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

VB.NET删除含应用名称文件问题:FileName失效且需适配应用改名

嘿,我完全懂你遇到的糟心事——硬编码文件名确实会在应用被改名后直接罢工,哪怕你开了管理员权限也救不了。咱们得换个思路:别写死文件名,而是让代码动态获取自身的运行信息,这样不管应用名字被改成啥样,程序都能自己找到自己。

下面给你几个不同场景下的实用方案,挑适合你编程语言的来用就行:

1. 动态获取当前程序的完整路径(通用核心思路)

这是最稳妥的方法,不管你是脚本还是编译后的可执行文件,都能拿到自己的真实路径和文件名:

  • C#:
    // 获取当前程序的完整路径
    string appFullPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
    // 提取文件名(带后缀)
    string appFileName = System.IO.Path.GetFileName(appFullPath);
    // 之后直接用appFileName替代你之前硬写的FileName就行
    
  • Python:
    注意区分脚本和打包后的exe:
    import sys
    import os
    
    # 如果是打包成exe的应用
    app_full_path = sys.executable
    # 如果是直接运行的py脚本
    # app_full_path = os.path.abspath(__file__)
    
    app_file_name = os.path.basename(app_full_path)
    
  • PowerShell:
    # 获取当前脚本/程序的完整路径
    $appFullPath = $MyInvocation.MyCommand.Definition
    # 提取文件名
    $appFileName = Split-Path -Path $appFullPath -Leaf
    

2. 用相对路径操作同目录文件(如果是文件交互场景)

如果你是要和程序同目录下的其他文件打交道,根本没必要纠结文件名——直接基于程序所在目录构建路径就行:
比如C#里读取同目录的配置文件:

string appDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
string configPath = System.IO.Path.Combine(appDir, "config.ini");
// 现在不管程序叫啥,都能精准找到config.ini

3. 通过进程信息定位自身(适合进程操作场景)

如果你的代码是要操作当前程序的进程(比如重启、获取进程信息),直接通过当前进程ID获取进程对象,完全绕开文件名:

  • C#:
    using System.Diagnostics;
    
    Process currentProcess = Process.GetCurrentProcess();
    // 可以获取进程的文件名:currentProcess.MainModule.FileName
    // 也可以直接对进程进行操作,比如currentProcess.Restart()
    
  • Python(需要安装psutil库):
    import psutil
    
    current_process = psutil.Process()
    app_file_name = current_process.name()
    # 后续操作进程就用这个对象就行
    

这些方法都是让代码自己“认清自己”,完全不依赖硬编码的字符串,所以不管之后谁改了应用的名字,代码都能正常跑起来~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:27:58