zoukankan      html  css  js  c++  java
  • 警惕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 应用程序启动路径 这样不管谁调用它都没问题。

    刚解决问题随笔记下~

  • 相关阅读:
    Leetcode 191.位1的个数 By Python
    反向传播的推导
    Leetcode 268.缺失数字 By Python
    Leetcode 326.3的幂 By Python
    Leetcode 28.实现strStr() By Python
    Leetcode 7.反转整数 By Python
    Leetcode 125.验证回文串 By Python
    Leetcode 1.两数之和 By Python
    Hdoj 1008.Elevator 题解
    TZOJ 车辆拥挤相互往里走
  • 原文地址:https://www.cnblogs.com/rui1236/p/5047652.html
Copyright © 2011-2022 走看看