欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

User Access Control 、Program Files 目录 与 Application Data

程序员文章站 2022-05-21 07:58:23
...

今天在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);