我正在将为 xp 开发的旧版 winform 应用程序移植到 windows 7 上,该应用程序目前使用 c#.net 3.5 和一些第三方控件开发,这些控件非常旧,但只要它们运行正常,就不想更改它们。问题是控件在 winform 上无法正确显示,因此我们发现解决方案是 DISABLETHEMES,如中所述
http://www.sevenforums.com/tutorials/316-compatibility-mode.html
解决方案在您右键单击 .exe 文件并设置 DISABLETHEMES 时有效。但当您手动进行注册表输入时,它不起作用
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
key applicationpath
value DISABLETHEMES
有人告诉我我错过了什么
答案1
我不知道它是否有帮助,我运行了一个跟踪,这是我对名为 MyIE(myie.exe)的程序的 GUI 进行更改后得到的结果。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Net\\MyIE2\\MyIE.exe"="WINXPSP3 256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE RUNASADMIN"
^ 这是程序的完整路径(路径可能很重要?)导入路径时不要忘记双反斜杠。该项目是字符串 Reg_SZ ?
&
在我之下作为用户(必须为用户提供正确的 ID,这个是混乱的)
[HKEY_USERS\S-1-5-21-1019789469-3873768421-1457166851-500\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\Net\\MyIE2\\MyIE.exe"="WINXPSP3 256COLOR 640X480 DISABLETHEMES DISABLEDWM HIGHDPIAWARE RUNASADMIN"
还有一个文件:一些报告进入系统磁盘的 windows/WER/ReportQueue/noncritical,我认为它只是一种“日志”类型的东西。
我没有看到任何其他重要的设置。HKEY_LOCAL_MACHINE <-- 此位置没有任何相关更改,我点击了 [更改所有用户的设置] 按钮。
我设置了所有标志,目的是看到所有标志或用作模板。
我有许多较旧的程序,其中一些永远无法在 Windows7 下以任何形式的兼容性正确运行,它们使用略有不同的编程方法,并且可能使用当时有效的一些糟糕技巧,它们经常失败。
答案2
为了解决问题,我必须在 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 中创建注册表项
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
key applicationpath
value DISABLETHEMES
和
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
key applicationpath
value DISABLETHEMES
如果您希望操作系统上的所有用户都使用相同的设置,那么对于当前用户,仅设置 HKEY_CURRENT_USER 条目就足够了。
当您在 HKEY_LOCAL_MACHINE 中进行输入时,应用程序 exe 不知何故不知道它。但是当您在 HKEY_CURRENT_USER 下进行输入时,应用程序会立即识别设置。