.net中获取可执行文件所在文件夹

       我维护的一个vb.net程序,客户端程序中需要访问客户端程序所在文件夹中的一个txt文档,在程序中我采用Environment. CurrentDirectory 属性来获取当前可执行程序所在的文件夹。程序跑了很久都没有出过问题。不过最近开始发现问题了。
有些电脑上,这个程序需要设置为开机启动(两种方式,1)将程序快捷图标放在开始菜单->程序->启动文件夹中;2)将在注册表的Run子项中添加一项),程序开机启动后,当读取这个文件夹时报错为“无法找到文件路径”,而错误提示的文件路径不是可执行文件所在的路径。
     在msdn中对 Environment. CurrentDirectory  是这样解释的: 获取或设置当前工作目录的完全限定路径。我一直以为这个工作目录就是可执行程序所在的文件夹。经过同事的提醒,在VC中的CreateProcess函数中有一个参数为 lpCurrentDirectory, .net中的 Environment. CurrentDirectory可能就是获取的lpCurrentDirectory。
    其实在.net中Process的Start函数中,有一个重载函数是接收一个 ProcessStartInfo对象,此对象可以指WorkingDirectory,而 Environment. CurrentDirectory就是从此参数中获取值。通过调试程序,发现:
     1)如果 ProcessStartInfo中 WorkingDirectory为null,则 Environment. CurrentDirectory就是创建进程的程序(就是包含Process.Start代码的程序)所在的目录。
     2)如果 WorkingDirectory指定为其它路径,如果改路径存在,则 Environment. CurrentDirectory为 WorkingDirectory。
     3)如果 WorkingDirectory指定的路径不存在,但是路径根目录,也就是磁盘盘符存在,则返回 Environment. CurrentDirectory为 WorkingDirectory指定的路径的磁盘盘符,如果磁盘盘符也不存在,则返回%system32%。
   
   那么应该调用什么来获取可执行文件所在文件夹?
   应该采用 Application.StartupPath 属性: 获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值