“在我的机器上可以运行”症状自查(Windows编程)

文章摘译自:Windows programming: The “it works on my machine” syndroma

 

  1. %ProgramFiles% folder protection
  2. UAC protection (User Account Control)
  3. File
  4. Path
  5. Windows 64bits
  6. Windows Compatibility Application Manifest
  7. Font
  8. Environment Variable
  9. DPI
  10. Blocked DLL and EXE

 

“Program Files” 目录保护

从 Vista 之后的 Windows 操作系统,应用程序的配置文件无法存放在之前的“%ProgramFiles%/[程序名称]” 目录下面,转而放在“%AppData%”目录下。

帐户控制保护

当程序启动一个进程或者访问网络的时候,Windows 帐户控制(UAC)可能会暂时“冻结”程序。

文件

注意只读文件、文件未找到、文件受保护或者是文件被阻止。

不要试图采用异常处理机制来解决这一类问题,而是使用类库来预防以及追加。

Exception Handling Best Practice in .NET

路径

考虑到相对路径、文件和目录转换、超过256字符的目录、文件名和扩展名,路径不仅仅是一个简单的字符串。

A free library to handle common and complex path operations

64位 Windows 操作系统

如果你使用了 unsafe code(比如指针pointer),那么你只有两种选择:

  1. 仅编译为 X86 模式 —— Wow64(Windows on Windows 64),你的程序很有可能会在64位的机器上以32位模式运行。
  2. 编译为 X86 和 X64 模式 —— 你会得到两个不同的分发包。64位模式的程序很有可能在64位的操作系统上得到更好的支持。

Windows 操作系统兼容应用程序列表

Windows Vista 和 Windows 7 有特别的兼容模式,用来执行早期版本的 Windows 程序。你可以在程序的属性页中兼容选项卡中选择你的兼容模式,执行程序的兼容模式存储在注册表里面。

字体

不要依赖于任何指定的字体列表,除非你能够检查字体列表的可用性并且处理其异常。

常见的问题是开发机器上安装有随 Office 附带的字体,而那些“干净”(没有安装 Office )的 Windows 上可能并没有你需要的字体。

推荐使用 Arial Narrow 和 MS sans serif

环境变量

即使是最基本的环境变量也可能没有按照默认值来设置。

DPI

一般情况下,程序在 96 DPI(Dot Per Inch)下运行良好,但是也有一些笔记本用户偏爱 120 DPI,这可可能导致 Window Form 和 GDI+ 部分的代码显示不正常。

DLL 和 EXE 被禁用

在 Windows 7 操作系统上,如果你使用 IE 下载一个 zip 文件,并且使用 Windows zip 解压缩,那么,解压后的 dll 和 exe 文件可能被操作系统标记为“阻止”。在这种情况下,一般会有提示框要求你确认这些可执行文件是否安全。但是如果是 Visual Studio 插件 DLL,那么 Visual Studio 2010 将无法加载这些插件,并且报错。

如何使用程序来解除阻止

posted on 2010-04-07 00:56  zhaorui  阅读(205)  评论(0编辑  收藏  举报

导航