无忧启动论坛

标题: Inno Setup 一行代码运行求助 [打印本页]

作者: leaguer    时间: 2022-11-6 10:58
标题: Inno Setup 一行代码运行求助
用 Inno Setup 做了一个软件的安装脚本,在 Inno Setup 代码运行一批处理文件时,通过控制台DOS窗口观察,批处理文件似乎运行成功,但实际没有起作用,需要手动双击“test.bat”,才起了作用,不知为何?难道是下面的调用代码有问题吗?

[Run]
Filename: "{app}\test.bat"; Parameters: "install"; Flags: runhidden
盼高人指点一二,不胜感激!!



作者: BestMiniPE    时间: 2022-11-6 11:17
本帖最后由 BestMiniPE 于 2022-11-6 11:27 编辑

应该是 参数 install 的问题,可能要加空格
作者: ZMLoveLH    时间: 2022-11-6 11:37
和楼主一样,我也想知道这个问题的答案啊,期待牛人的解答
作者: leaguer    时间: 2022-11-6 11:45
我用下面代码调试及跟踪:
[Run]
Filename:{cmd};Parameters: "/C ""{app}\test.bat""; arguments"
发现:

001.jpg (99.33 KB, 下载次数: 32)

001.jpg

作者: leaguer    时间: 2022-11-6 11:47
发现提示:
HKLM\SOFTWARE\Classes\CLSID\{57FA2D12-D22D-490A-805A-5CB48E84F12A}
等键值“操作已成功完成”,但查注册表并没有这些键值??

002.jpg (91.17 KB, 下载次数: 33)

002.jpg

作者: leaguer    时间: 2022-11-6 11:50
奇诡了?哪儿出了问题??
作者: leaguer    时间: 2022-11-6 11:51
BestMiniPE 发表于 2022-11-6 11:17
应该是 参数 install 的问题,可能要加空格

用那种参数代码,编译是OK的,但不知哪儿出了问题?怪了
作者: 527104427    时间: 2022-11-6 12:04
leaguer 发表于 2022-11-6 11:51
用那种参数代码,编译是OK的,但不知哪儿出了问题?怪了

这种问题是无解的。
原因就是因为重定向问题,我猜你肯定是64位系统,而且inno setup是32位程序,打包后就自动被重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes  了。
要想不出问题,就只能32位程序打包的供32位系统用,64位程序打包的供64位系统用。
作者: leaguer    时间: 2022-11-6 12:20
527104427 发表于 2022-11-6 12:04
这种问题是无解的。
原因就是因为重定向问题,我猜你肯定是64位系统,而且inno setup是32位程序,打包后 ...
是的,我是64位系统
果然是在:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes
下找到了
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{57FA2D12-D22D-490A-805A-5CB48E84F12A}


作者: leaguer    时间: 2022-11-6 12:22
本帖最后由 leaguer 于 2022-11-6 12:41 编辑

但是为什么手动运行 “test.bat” 就可以了?
许多安装程序也是用 Inno Setup 打包的,但却可以识别32位与64位系统,成功处理的。
应该有解决办法吧?


发现这里似乎有解决方法:
3个w.codenong.com/12956499/
但不知到怎么处理?


作者: hua_wuxin    时间: 2022-11-6 12:56
本帖最后由 hua_wuxin 于 2022-11-6 19:54 编辑

在你批处理最前面加上
@setlocal enabledelayedexpansion
@if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe /c "%~f0" %* & exit /b !errorlevel!
作者: leaguer    时间: 2022-11-6 14:00
hua_wuxin 发表于 2022-11-6 12:56
在你批处理最前面加一句
if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe /c %0 ...

好的,谢谢,我试试看
作者: leaguer    时间: 2022-11-6 14:17
本帖最后由 leaguer 于 2022-11-6 14:18 编辑
hua_wuxin 发表于 2022-11-6 12:56
在你批处理最前面加一句
if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe /c %0 ...

在64位Win7与64位Win10上测试OK,再谢!!
论坛真乃藏龙卧虎之地哦!
稍后在32位系统上测试看看

不过不明白您添加的那行代码什么意思哦

作者: wszjf    时间: 2022-11-6 14:24
这个不难
在inno里判断一下系统位数对应写到64位或32位的位置就可以了
判断以后写入的话,可以写2个不同的批处理或改到[Registry]段写注册表都可以
Check: "IsWin64"

如果不改inno,批处理判断系统位数也不难
@echo off
if /i "%PROCESSOR_IDENTIFIER:~0,3%" == "x86" goto 1
if /i "%PROCESSOR_IDENTIFIER:~0,3%" NEQ "x86" goto 2
:1
@echo 32bit
这里写32位注册表
exit

:2
@echo 64bit
这里写64位注册表
exit

作者: hua_wuxin    时间: 2022-11-6 14:56
本帖最后由 hua_wuxin 于 2022-11-6 19:54 编辑
leaguer 发表于 2022-11-6 14:17
在64位Win7与64位Win10上测试OK,再谢!!
论坛真乃藏龙卧虎之地哦!
稍后在32位系统上测试看看{:1_186 ...

修正下:
@setlocal enabledelayedexpansion
@if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe /c "%~f0" %* & exit /b !errorlevel!

如果批处理跑在64位系统下的32位环境中,%SystemRoot%\Sysnative\cmd.exe文件就是存在/有效的,指向真正的64位的cmd.exe。此时用64位的cmd.exe重新解释运行批处理自身即%~f0。
作者: uvwlab    时间: 2022-11-6 15:11
本帖最后由 uvwlab 于 2022-11-6 15:16 编辑
527104427 发表于 2022-11-6 12:04
这种问题是无解的。
原因就是因为重定向问题,我猜你肯定是64位系统,而且inno setup是32位程序,打包后 ...

有解,写插件禁用重定向
作者: leaguer    时间: 2022-11-6 15:52
wszjf 发表于 2022-11-6 14:24
这个不难
在inno里判断一下系统位数对应写到64位或32位的位置就可以了
判断以后写入的话,可以写2个不同 ...

感谢您的指点!
慢慢消化测试一下


作者: leaguer    时间: 2022-11-6 15:56
hua_wuxin 发表于 2022-11-6 14:56
修正下:
@setlocal enabledelayedexpansion
@if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\ ...

再谢您的指点!
再测试看看
作者: wszjf    时间: 2022-11-6 16:05
leaguer 发表于 2022-11-6 15:56
再谢您的指点!
再测试看看

不用客气,写注册表对inno来说是小菜一碟,只是需要注意一些细节
作者: wszjf    时间: 2022-11-6 16:09
本帖最后由 wszjf 于 2022-11-6 16:13 编辑

问下楼主,你这是要制作Beyond Compare安装包吗?这个软件本身支持便携安装,生成的文件就是绿色版文件,直接拷贝文件夹就能用,不需要写注册表
作者: leaguer    时间: 2022-11-6 16:33
wszjf 发表于 2022-11-6 16:09
问下楼主,你这是要制作Beyond Compare安装包吗?这个软件本身支持便携安装,生成的文件就是绿色版文件,直 ...

是的
1.绿色版与资源管理器整合经常无效
2.对BC主程序彻底破解联网后,安装包顺带上key文件就完美了

但安装前最好能检测BC是否在运行,如果在运行则提示先卸载BC再安装,正在寻找相关代码
作者: leaguer    时间: 2022-11-6 16:38
hua_wuxin 发表于 2022-11-6 14:56
修正下:
@setlocal enabledelayedexpansion
@if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\ ...

测试了,您修正的代码按在我的批处理文件里,批处理文件被 Inno Setup 代码调用反而不行了,而修改前的反而可以。

Inno Setup 调用代码如下:
[Run]
Filename: "{cmd}"; Parameters: "/c ""{app}\test.cmd"""; Flags: hidewizard runhidden

是不是这里的 "{cmd}" 在作怪?
作者: nttwqz    时间: 2022-11-6 19:25
Inno不会,想来也应该原生支持修改注册表这种基本功能吧?是不是不熟悉所以用了批处理?

NSIS是这样的,我一般都重写了,除非cmd实现很简单,NSIS实现很复杂。所以,建议用Inno重写

  1. Section
  2.   ${If} ${IsNativeAMD64}
  3.   ${OrIf} ${IsWow64}
  4.     ${DisableX64FSRedirection}
  5.   ${EndIf}
  6.   nsExec::Exec "$EXEDIR\test.cmd"
  7. SectionEnd
复制代码

作者: hua_wuxin    时间: 2022-11-6 19:55
leaguer 发表于 2022-11-6 16:38
测试了,您修正的代码按在我的批处理文件里,批处理文件被 Inno Setup 代码调用反而不行了,而修改前的反 ...

是我第二遍写错了,cmd.exe后面少了 /c 。你加上试试。
作者: leaguer    时间: 2022-11-6 20:43
nttwqz 发表于 2022-11-6 19:25
Inno不会,想来也应该原生支持修改注册表这种基本功能吧?是不是不熟悉所以用了批处理?

NSIS是这样的, ...

是的,半路出家,现用现学点
相比 Inno Setup ,对半路出家来说,NSIS 代码更加晦涩难懂



作者: leaguer    时间: 2022-11-6 20:44
hua_wuxin 发表于 2022-11-6 19:55
是我第二遍写错了,cmd.exe后面少了 /c 。你加上试试。

好的,再谢!
再测试看看,修改后的代码效果应该更好




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3