我用installshield做的安装程序,在安装时会写入注册表Run键下几个值实现自启动,在windowXP下一切正常,但在vista跟Win7下(均为64位)安装时未报任何错误,但安装结束后查看注册表却发现并没有写入。对于这个问题大家是怎么看的呢?
  下面是的我的相关脚本:
if(RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE)=0)then
        if(RegDBCreateKeyEx( "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "example1")<0)then
        MessageBox("exampl1 eregistration failed,installation  will be terminated ",SEVERE);
        abort;
        endif; 
RegDBSetKeyValueEx( "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "example1",  REGDB_STRING, TARGETDIR^"example1.exe", -1 );
else
    MessageBox("HKEY_LOCAL_MACHINE is not existed,installation will be terminated",SEVERE) ; 
    abort;
endif; 

解决方案 »

  1.   

    HKEY_LOCAL_MACHINE 这个需要管理员权限,在Vista,Win7上面需要提升UAC,所以你的安装程序也需要提升管理员,UAC
      

  2.   

    应该是因为权限的问题,我以前的做法是用C++写一个改注册表的程序(设置弹出提升权限提示,在VS2008或VS2010中有选项),然后在安装的过程中调用这个程序。
      

  3.   

      楼上诸位说是权限的问题,但我用的是installshield2010版,理论上来说应该是已经解决了权限问题了吧,就算是权限问题那也应该在写入注册表是检测到权限不够时应该提示是否升级权限啊。最主要的是我也意识到有可能是这个问题,都是使用administration账户登录的,甚至运行时还是选择的 run as administration,因此应该不会是权限的问题吧。
      还有,我发觉安装完重启后再注册表里Run键下并没有写入任何信息,但我想让他自启动的部分程序却自启动了,会不会是实际上已经写入了但是操作系统隐藏了不显示出来呢?