从XP到VISTA下程序兼容性问题

来源:互联网 发布:linux查看用户名密码 编辑:程序博客网 时间:2024/05/29 05:58

 因为公司项目需要,这两天要把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的问题就可以(右键-》兼容性-》以管理员身份运行)。(*^__^*) 嘻嘻……,第一次写博客,有什么不足别扔臭鸡蛋哦,好的就无所谓~~!

 

 

 

原创粉丝点击