VB.net/C#运行时能否修改应用argv参数?求解决方案
问题解答
一、运行时能不能修改argv?
在VB.NET/C#里,运行时根本没法修改argv(命令行参数):
- VB.NET的
My.Application.CommandLineArgs是只读集合,只能读取不能修改; - 就算用
Environment.GetCommandLineArgs()拿到参数数组,修改的也只是内存里的副本,进程实际的命令行参数不会变化,依赖argv的逻辑也完全感知不到; - 从操作系统层面来说,进程启动后,命令行参数就固定死了,没有任何途径可以动态修改。
二、正确的解决办法
既然改不了argv,就得换个思路让数据获取应用能拿到当前标签页的文件,推荐这几个方案:
方案1:自定义进程间通信机制
别死磕argv了,给PDF查看器和数据获取应用搭建明确的通信通道:
- 切换标签页时,把当前文件路径通过命名管道、WM_COPYDATA消息或者共享内存这类进程间通信方式传给数据获取应用;
- 修改数据获取应用的逻辑,优先从这个自定义通道读取文件路径,替代原本依赖argv的逻辑。
方案2:模拟多进程行为(兼容原有逻辑)
如果不想改动数据获取应用的原有代码,可以给每个标签页模拟独立的“虚拟进程”标识:
- 给每个标签页分配唯一标识,当数据获取应用需要读取文件时,让PDF查看器返回对应标签页的文件路径,替换原本从argv读取的逻辑;
- 或者切换标签时,启动一个轻量级的代理进程,把它的argv设置为当前文件路径,让数据获取应用与代理进程交互,代理进程再和主PDF查看器通信获取数据。
方案3:修改数据获取应用的依赖逻辑
直接调整数据获取应用的代码,让它支持通过指定参数(比如--current-file <文件路径>)或者读取PDF查看器的窗口标题(切换标签时更新窗口标题为当前文件名)来获取当前打开的文件,别硬卡着argv(0)不放。
内容的提问来源于stack exchange,提问作者Bartek Ferenc
相关产品推荐
相关产品推荐

