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
相关产品推荐
相关产品推荐

