• 警惕System.Environment.CurrentDirectory 获取当前目录


      最近工作中,要做个客户端提醒的小工具;winform程序自然少不了要读取和应用程序同一个目录的配置文件(不是exe.config文件);

    要读取当前应用程序所在目录我立马想到了System.Environment.CurrentDirectory 来获取当前工作目录。程序运行似乎一切正常完美无缺;

    到了第二天早上来上班一开机弹出:“读取配置文件丢失”。应用程序增加了开机自启动。弹出这个消息读取配文件失败,立马检查应用程序目录下的配置文件是不是被自己删了。一检查发现文件还在呀,退出程序重新运行

    依然正常,没有弹出读取配置文件丢失。然后就看看注册表里开机启动项的路径不在我这个目录吗?看了看路径文件也都对呀。有点纳闷了?注销电脑再启动试试 依然如此 弹出配置文件丢失。找不到原因直接将获取的路

    径MessageBox下,程序运行发现路径确实是这个路径。

    添加了MessageBox这个代码后继续开机测试。开机发现弹出的当前目录是C:WindowsSystem32 一下子百思不得其解。心想难不成老子的程序跑到system32下去了吗?检查注册表和sysetm32并没有我的应用程序。最后心想应该是获取路径的代码有问题。

    经反复测试发现System.Environment.CurrentDirectory确实是获取当前目录没错,但是如果A程序调用B程序 B程序里使用了System.Environment.CurrentDirectory获取目录。那么这个B程序里获取的这个目录就不再是B的应用程序所在目录了;而变成了A所在的目录了。这也就不难发现我在开机时弹出的目录是C:WindowsSystem32 因为开机自启动程序也是由windows的某个进程调用的。

    所以如果winform程序要获取当前应用程序所在目录最好不要用System.Environment.CurrentDirectory。而改为:Application.StartupPath 应用程序启动路径 这样不管谁调用它都没问题。

    刚解决问题随笔记下~

  • 相关阅读:
    C# 修改DataTable列 类型 并从新赋值
    buildroot 使用小记
    如何查看linux内核的版本号?
    在ubuntu上使用华为的3G无线上网卡
    在ubuntu上编译rasbian kernel(for raspberry pi 1)
    装了ubuntu后笔记本电脑的无线网卡用不了,怎么设置?
    Ubuntu下哪个PDF阅读器更好使???
    转载 :Linux有问必答:如何在Debian或Ubuntu上安装完整的内核源码
    Raspberry Pi
    cygwin下调用make出现的奇怪现象
  • 原文地址:https://www.cnblogs.com/rui1236/p/5047652.html
Copyright © 2020-2023  润新知