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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。