论坛首页
论坛首页 开发者论坛 PortableApps开发 X64 系统注册表便携问题

X64 系统注册表便携问题

讨论关于便携软件开发的技术与问题,包括PAL、NSIS、VMware ThinApp及其他。
burnt 红心可鉴
红心可鉴

帖子: 53
本人是做工程,很多大型设计软件都只开发X64版本,所以被逼安装的 Windows 系统是64 位

经过测试,及本人做便携的软件经验,很多32位软件都会有残留注册表的现像,主要原因是32位软件会在HKEY_LOCAL_MACHINE\SOFTWARE\AppName 下写入注册表,而用DeleteRegKey HKEY_LOCAL_MACHINE\SOFTWARE\AppName 删除的实际是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AppName

便携软件能否实现写入和删除HKEY_LOCAL_MACHINE\SOFTWARE\AppName 这值得探讨,希望有经验的能分享一下


昨天终于有突破了,解决了注册表的问题,第一个试验品大家测试一下图片

下载地址:http://pan.baidu.com/s/1dDGOK7n 密码:7sle

WiseCare365 专注于系统清理,由本人自己完成,绿色便携,打开软件就已经是注册专业版,注册码也是可以更换的,在软件目录有下有INI文件,License Key 可以更换,User Name 也可以的更换
最后由 burnt 编辑于 2014-10-30 14:58,总共编辑了 2 次

jooseng 革命同志
革命同志

帖子: 3503
burnt 写道:
本人是做工程,很多大型设计软件都只开发X64版本,所以被逼安装的 Windows 系统是64 位

经过测试,及本人做便携的软件经验,很多32位软件都会有残留注册表的现像,主要原因是32位软件会在HKEY_LOCAL_MACHINE\SOFTWARE\AppName 下写入注册表,而用DeleteRegKey HKEY_LOCAL_MACHINE\SOFTWARE\AppName 删除的实际是HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AppName

便携软件能否实现写入和删除HKEY_LOCAL_MACHINE\SOFTWARE\AppName 这值得探讨,希望有经验的能分享一下

用 “x64.nsh” header. 如果你的NSIS "..\NSIS\Include" 里没有,请自己加入。

=================================================================
; ---------------------
; x64.nsh
; ---------------------
;
; A few simple macros to handle installations on x64 machines.
;
; RunningX64 checks if the installer is running on x64.
;
; ${If} ${RunningX64}
; MessageBox MB_OK "running on x64"
; ${EndIf}
;
; DisableX64FSRedirection disables file system redirection.
; EnableX64FSRedirection enables file system redirection.
;
; SetOutPath $SYSDIR
; ${DisableX64FSRedirection}
; File some.dll # extracts to C:\Windows\System32
; ${EnableX64FSRedirection}
; File some.dll # extracts to C:\Windows\SysWOW64
;

!ifndef ___X64__NSH___
!define ___X64__NSH___

!include LogicLib.nsh

!macro _RunningX64 _a _b _t _f
!insertmacro _LOGICLIB_TEMP
System::Call kernel32::GetCurrentProcess()i.s
System::Call kernel32::IsWow64Process(is,*i.s)
Pop $_LOGICLIB_TEMP
!insertmacro _!= $_LOGICLIB_TEMP 0 `${_t}` `${_f}`
!macroend

!define RunningX64 `"" RunningX64 ""`

!macro DisableX64FSRedirection

System::Call kernel32::Wow64EnableWow64FsRedirection(i0)

!macroend

!define DisableX64FSRedirection "!insertmacro DisableX64FSRedirection"

!macro EnableX64FSRedirection

System::Call kernel32::Wow64EnableWow64FsRedirection(i1)

!macroend

!define EnableX64FSRedirection "!insertmacro EnableX64FSRedirection"

!endif # !___X64__NSH___

=================================================================
在PAL CustomCode 是这样:

------------------------------------------------------------
!include x64.nsh

${SegmentFile}

${Segment.OnInit}
${If} ${RunningX64}
SetRegView 64 ;不让注册表键重新定位。
${DisableX64FSRedirection} ;不让文件系统重新定位。
${EndIf}
!macroend

--------------------------------------------------------------

直接写NSIS我不熟悉,自己想办法。

burnt 红心可鉴
红心可鉴

帖子: 53
不知道是我的语法错误还是怎么回事,!include x64.nsh 不能解决问题,今天再加班开发试试,因为最近手头上没什么有时间折腾一下

fallenyugo 两把菜刀
两把菜刀

帖子: 14
试用了一下,退出的时候会弹出购买的窗口啊。
感觉主程序和 Tray程序之间的关系可以处理得更好,目前在关闭主程序而未退出 Tray的情况下,再次运行启动器,会有关于 上一次运行未正确退出的提示。

burnt 红心可鉴
红心可鉴

帖子: 53
fallenyugo 写道:
试用了一下,退出的时候会弹出购买的窗口啊。
感觉主程序和 Tray程序之间的关系可以处理得更好,目前在关闭主程序而未退出 Tray的情况下,再次运行启动器,会有关于 上一次运行未正确退出的提示。


经测试,只发再程序在起动时会弹出购买的窗口,没发现退出的时候会弹出购买的窗口,昨晚试了一大堆代码也没有解决,今天用J大的KEY 问题居然解决,已更新下载地址。


修改点:WiseTray.exe WiseTurbo.exe WiseBootBooster.exe 这3个进程不退出,便携软件是不会退出
以上三个程序未退出,是不能再打开新的便携程序


回到 PortableApps开发