从XP到VISTA下程序兼容性问题
2009-04-29 11:38
176 查看
因为公司项目需要,这两天要把xp下面的项目移植到VISTA下面。
问题:
本来在xp下面非常正常的程序到了vista下面运行的时候,却没有弹出任何界面。去任务管理器看却存在程序的进程,只是内存很小,像僵尸进程一样。郁闷中~~~,同事以前解决过这种问题是因为某个dll加载不上,如是检查自己的dll发现都能加载上去。怀疑是使用了系统的某些API在vista下不兼容,没办法把程序从头开始一步步移植到vista下面看走到哪一步会出现没有界面的情况。最终,发现果然还是自己的dll惹的祸,虽然加载上去了但就因此没有了程序的界面。修改dll后问题解决~~~
但第二个问题出现,程序中对注册表的操作居然失败。网上找了很久原因,发现原来是vista下的UAC(用户账户管理)问题。因为注册表操作可能会影响到系统的安全,所以vista下面要进行注册表等涉及到系统安全的行为必须要程序以管理员模式运行才可以(即使你是管理员,也要右键-》管理员模式运行)。
解决方法:
(来源:vista之家)
对于VC程序员来说,这个过程其实并不复杂,大家看下下面的代码:
///////// 本行以下为代码,不含本行
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
<assemblyIdentity
version=”1.0.0.0″
processorArchitecture=”X86″
name=”test.exe.manifest”
type=”win32″
/>
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
<security>
<requestedPrivileges>
<requestedExecutionLevel level=”requireAdministrator” uiAccess=”false”/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
///////// 本行以上位代码,不含本行
该代码添加到VC资源中即可, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1
如果只有一个可执行文件,也可以通过以下方法添加:
mt.exe -manifest e4nmgr.exe.manifest -outputresource:e4nmgr.exe;1
这样,就可以在C++编译出来的程序里面实现申请管理员权限那个功能了。
------------------------------------------------------------------------
注意以上xml复制下来如果有中文标点符号要改成英文的标点符号,要不会提示 "并行配置错误",完成后点击vs03的调试会
弹出UAC验证确认的盾牌。看你生成的exe文件会发现图标旁边多了影响“盾牌标志”
问题3:在vs03里面调试程序却没有界面了,无法调试。
解决方法:
找到vs03的主程序,右键--》兼容性---》以管理员模式运行。OK,可以正确调试程序了。
-----------------------------------------------------------
总结:xp的程序要运行在vista下面如果出现什么问题。直接想到UAC的问题就可以(右键-》兼容性-》以管理员身份运行)。(*^__^*) 嘻嘻……,第一次写博客,有什么不足别扔臭鸡蛋哦,好的就无所谓~~!
问题:
本来在xp下面非常正常的程序到了vista下面运行的时候,却没有弹出任何界面。去任务管理器看却存在程序的进程,只是内存很小,像僵尸进程一样。郁闷中~~~,同事以前解决过这种问题是因为某个dll加载不上,如是检查自己的dll发现都能加载上去。怀疑是使用了系统的某些API在vista下不兼容,没办法把程序从头开始一步步移植到vista下面看走到哪一步会出现没有界面的情况。最终,发现果然还是自己的dll惹的祸,虽然加载上去了但就因此没有了程序的界面。修改dll后问题解决~~~
但第二个问题出现,程序中对注册表的操作居然失败。网上找了很久原因,发现原来是vista下的UAC(用户账户管理)问题。因为注册表操作可能会影响到系统的安全,所以vista下面要进行注册表等涉及到系统安全的行为必须要程序以管理员模式运行才可以(即使你是管理员,也要右键-》管理员模式运行)。
解决方法:
(来源:vista之家)
对于VC程序员来说,这个过程其实并不复杂,大家看下下面的代码:
///////// 本行以下为代码,不含本行
<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>
<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>
<assemblyIdentity
version=”1.0.0.0″
processorArchitecture=”X86″
name=”test.exe.manifest”
type=”win32″
/>
<trustInfo xmlns=”urn:schemas-microsoft-com:asm.v3″>
<security>
<requestedPrivileges>
<requestedExecutionLevel level=”requireAdministrator” uiAccess=”false”/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
///////// 本行以上位代码,不含本行
该代码添加到VC资源中即可, 添加方式:
添加一个“custom”资源,”resource type”填24,把资源ID改为1
如果只有一个可执行文件,也可以通过以下方法添加:
mt.exe -manifest e4nmgr.exe.manifest -outputresource:e4nmgr.exe;1
这样,就可以在C++编译出来的程序里面实现申请管理员权限那个功能了。
------------------------------------------------------------------------
注意以上xml复制下来如果有中文标点符号要改成英文的标点符号,要不会提示 "并行配置错误",完成后点击vs03的调试会
弹出UAC验证确认的盾牌。看你生成的exe文件会发现图标旁边多了影响“盾牌标志”
问题3:在vs03里面调试程序却没有界面了,无法调试。
解决方法:
找到vs03的主程序,右键--》兼容性---》以管理员模式运行。OK,可以正确调试程序了。
-----------------------------------------------------------
总结:xp的程序要运行在vista下面如果出现什么问题。直接想到UAC的问题就可以(右键-》兼容性-》以管理员身份运行)。(*^__^*) 嘻嘻……,第一次写博客,有什么不足别扔臭鸡蛋哦,好的就无所谓~~!
相关文章推荐
- Vista/Win 7安装程序冲突问题的解决方法
- QT_win7下编译的程序在xp中运行中文乱码问题
- 关于Android程序真机不兼容性问题总结及手机ROOT方法
- 说一下你的程序在ios5里面遇到的兼容性问题以及解决方法吧
- win-xp-sp3 安装SQL2005时提示 兼容性问题
- Windows 8下程序兼容性问题解决
- Windows 7/Vista/XP系统间共享文件夹权限问题解决方案
- VISTA程序兼容性向导
- 解决VS2012/VS2013/VS2015下编译的程序无法在XP下运行的问题
- .net 4.0下发布程序,xp系统提示sqlite.dll需要依赖库问题
- 关于使Visual Studio 2005/2008开发的程序具有XP风格的问题
- 关于可执行程序 执行后 弹出“兼容性助手” 和 cef 客户端 titel无法显示的问题。
- vs2013编译程序不能在xp上运行的问题
- Vista下VC6.0的安装 兼容性问题
- Win32开发First of All:如何在Win32程序中使用XP风格(vista)的按钮?
- 解决xp右键打开方式浏览程序后,无法添加到列表的问题
- IIS6.0中.net1.1程序与.net2.0程序的兼容性问题.
- XP系统设置Vista屏幕保护程序的方法
- ThinkPad R400 VISTA换XP 所有驱动及程序安装一览表
- vs开发的程序在xp下显示 xxx.exe不是有效的win32程序问题解决