User Access Control 、Program Files 目录 与 Application Data

原创
2016-06-07 15:43:07683浏览

今天在debug一个奇怪的问题,一个程序在开发机器上没有任何错误,但是安装在客户机器上之后,只要客户运行它,就立刻停止响应。更加奇怪的是,程序本身没有输出任何日志。开始以为是安装包做的不好,但是几次实验之后,证明问题出在程序本身。经过排除法,发

今天在debug一个奇怪的问题,一个程序在开发机器上没有任何错误,但是安装在客户机器上之后,只要客户运行它,就立刻停止响应。更加奇怪的是,程序本身没有输出任何日志。开始以为是安装包做的不好,但是几次实验之后,证明问题出在程序本身。经过排除法,发现这个问题只在启用了UAC的Windows 7和Vista上。于是我包了一个很大的Try Catch,并且用MessageBox直接输出Exception的内容。结果是令人惊讶的,问题居然就出在写Log的地方。

网上搜索了一下,便很快找到了原因。当User Access Control被启用之后,程序不能改写%ProgramFiles%目录中的内容。而我调试的程序一开始就在写Log,同时Log的目录又就是在安装目录底下。说白了,这其实是一个很不好的编程习惯所导致的问题,作为一个正规的程序,它的临时文件应该保存在%APPDATA%中。修改了Log保存路径之后,一切OK。

附C#中获得%APPDATA%的代码:

string appDataFolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
PHP中文网
程序员·梦开始的地方
下载APP