无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3199|回复: 25
打印 上一主题 下一主题

[求助] Inno Setup 一行代码运行求助

[复制链接]
跳转到指定楼层
1#
发表于 2022-11-6 10:58:29 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
用 Inno Setup 做了一个软件的安装脚本,在 Inno Setup 代码运行一批处理文件时,通过控制台DOS窗口观察,批处理文件似乎运行成功,但实际没有起作用,需要手动双击“test.bat”,才起了作用,不知为何?难道是下面的调用代码有问题吗?

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


2#
发表于 2022-11-6 11:17:25 | 只看该作者
本帖最后由 BestMiniPE 于 2022-11-6 11:27 编辑

应该是 参数 install 的问题,可能要加空格

点评

用那种参数代码,编译是OK的,但不知哪儿问题?怪了  详情 回复 发表于 2022-11-6 11:51
回复

使用道具 举报

3#
发表于 2022-11-6 11:37:55 | 只看该作者
和楼主一样,我也想知道这个问题的答案啊,期待牛人的解答
回复

使用道具 举报

4#
 楼主| 发表于 2022-11-6 11:45:21 | 只看该作者
我用下面代码调试及跟踪:
[Run]
Filename:{cmd};Parameters: "/C ""{app}\test.bat""; arguments"
发现:

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

001.jpg
回复

使用道具 举报

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

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

002.jpg
回复

使用道具 举报

6#
 楼主| 发表于 2022-11-6 11:50:03 | 只看该作者
奇诡了?哪儿出了问题??
回复

使用道具 举报

7#
 楼主| 发表于 2022-11-6 11:51:39 | 只看该作者
BestMiniPE 发表于 2022-11-6 11:17
应该是 参数 install 的问题,可能要加空格

用那种参数代码,编译是OK的,但不知哪儿出了问题?怪了

点评

这种问题是无解的。 原因就是因为重定向问题,我猜你肯定是64位系统,而且inno setup是32位程序,打包后就自动被重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes 了。 要想不出问题,就只能32位程序打  详情 回复 发表于 2022-11-6 12:04
回复

使用道具 举报

8#
发表于 2022-11-6 12:04:40 | 只看该作者
leaguer 发表于 2022-11-6 11:51
用那种参数代码,编译是OK的,但不知哪儿出了问题?怪了

这种问题是无解的。
原因就是因为重定向问题,我猜你肯定是64位系统,而且inno setup是32位程序,打包后就自动被重定向到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes  了。
要想不出问题,就只能32位程序打包的供32位系统用,64位程序打包的供64位系统用。

点评

果然是在: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes 下找到了  详情 回复 发表于 2022-11-6 12:20

评分

参与人数 1无忧币 +5 收起 理由
879792799 + 5 5大威武

查看全部评分

回复

使用道具 举报

9#
 楼主| 发表于 2022-11-6 12:20:53 | 只看该作者
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}

回复

使用道具 举报

10#
 楼主| 发表于 2022-11-6 12:22:29 | 只看该作者
本帖最后由 leaguer 于 2022-11-6 12:41 编辑

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


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

回复

使用道具 举报

11#
发表于 2022-11-6 12:56:58 | 只看该作者
本帖最后由 hua_wuxin 于 2022-11-6 19:54 编辑

在你批处理最前面加上
@setlocal enabledelayedexpansion
@if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe /c "%~f0" %* & exit /b !errorlevel!

点评

在64位Win7与64位Win10上测试OK,再谢!! 论坛真乃藏龙卧虎之地哦! 稍后在32位系统上测试看看  详情 回复 发表于 2022-11-6 14:17
好的,谢谢,我试试看  详情 回复 发表于 2022-11-6 14:00
回复

使用道具 举报

12#
 楼主| 发表于 2022-11-6 14:00:14 | 只看该作者
hua_wuxin 发表于 2022-11-6 12:56
在你批处理最前面加一句
if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe /c %0 ...

好的,谢谢,我试试看
回复

使用道具 举报

13#
 楼主| 发表于 2022-11-6 14:17:14 | 只看该作者
本帖最后由 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位系统上测试看看

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

点评

修正下: @setlocal enabledelayedexpansion @if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\Sysnative\cmd.exe "%~f0" %* & exit /b !errorlevel! 如果批处理跑在64位系统下的32位环境中,%SystemRoo  详情 回复 发表于 2022-11-6 14:56
回复

使用道具 举报

14#
发表于 2022-11-6 14:24:07 | 只看该作者
这个不难
在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

点评

感谢您的指点! 慢慢消化测试一下  详情 回复 发表于 2022-11-6 15:52
回复

使用道具 举报

15#
发表于 2022-11-6 14:56:15 | 只看该作者
本帖最后由 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。

点评

测试了,您修正的代码按在我的批处理文件里,批处理文件被 Inno Setup 代码调用反而不行了,而修改前的反而可以。 Inno Setup 调用代码如下: 是不是这里的 "{cmd}" 在作怪?  详情 回复 发表于 2022-11-6 16:38
再谢您的指点! 再测试看看  详情 回复 发表于 2022-11-6 15:56
回复

使用道具 举报

16#
发表于 2022-11-6 15:11:01 | 只看该作者
本帖最后由 uvwlab 于 2022-11-6 15:16 编辑
527104427 发表于 2022-11-6 12:04
这种问题是无解的。
原因就是因为重定向问题,我猜你肯定是64位系统,而且inno setup是32位程序,打包后 ...

有解,写插件禁用重定向
回复

使用道具 举报

17#
 楼主| 发表于 2022-11-6 15:52:18 | 只看该作者
wszjf 发表于 2022-11-6 14:24
这个不难
在inno里判断一下系统位数对应写到64位或32位的位置就可以了
判断以后写入的话,可以写2个不同 ...

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

回复

使用道具 举报

18#
 楼主| 发表于 2022-11-6 15:56:36 | 只看该作者
hua_wuxin 发表于 2022-11-6 14:56
修正下:
@setlocal enabledelayedexpansion
@if exist %SystemRoot%\Sysnative\cmd.exe %SystemRoot%\ ...

再谢您的指点!
再测试看看
回复

使用道具 举报

19#
发表于 2022-11-6 16:05:14 | 只看该作者
leaguer 发表于 2022-11-6 15:56
再谢您的指点!
再测试看看

不用客气,写注册表对inno来说是小菜一碟,只是需要注意一些细节
回复

使用道具 举报

20#
发表于 2022-11-6 16:09:52 来自手机 | 只看该作者
本帖最后由 wszjf 于 2022-11-6 16:13 编辑

问下楼主,你这是要制作Beyond Compare安装包吗?这个软件本身支持便携安装,生成的文件就是绿色版文件,直接拷贝文件夹就能用,不需要写注册表

点评

是的 1.绿色版与资源管理器整合经常无效 2.对BC主程序彻底破解联网后,安装包顺带上key文件就完美了 但安装前最好能检测BC是否在运行,如果在运行则提示先卸载BC再安装,正在寻找相关代码  详情 回复 发表于 2022-11-6 16:33
回复

使用道具 举报

21#
 楼主| 发表于 2022-11-6 16:33:50 | 只看该作者
wszjf 发表于 2022-11-6 16:09
问下楼主,你这是要制作Beyond Compare安装包吗?这个软件本身支持便携安装,生成的文件就是绿色版文件,直 ...

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

但安装前最好能检测BC是否在运行,如果在运行则提示先卸载BC再安装,正在寻找相关代码
回复

使用道具 举报

22#
 楼主| 发表于 2022-11-6 16:38:15 | 只看该作者
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}" 在作怪?

点评

是我第二遍写错了,cmd.exe后面少了 /c 。你加上试试。  详情 回复 发表于 2022-11-6 19:55
回复

使用道具 举报

23#
发表于 2022-11-6 19:25:39 | 只看该作者
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
复制代码

点评

是的,半路出家,现用现学点 相比 Inno Setup ,对半路出家来说,NSIS 代码更加晦涩难懂  详情 回复 发表于 2022-11-6 20:43
回复

使用道具 举报

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

是我第二遍写错了,cmd.exe后面少了 /c 。你加上试试。

点评

好的,再谢! 再测试看看,修改后的代码效果应该更好  详情 回复 发表于 2022-11-6 20:44
回复

使用道具 举报

25#
 楼主| 发表于 2022-11-6 20:43:19 | 只看该作者
nttwqz 发表于 2022-11-6 19:25
Inno不会,想来也应该原生支持修改注册表这种基本功能吧?是不是不熟悉所以用了批处理?

NSIS是这样的, ...

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


回复

使用道具 举报

26#
 楼主| 发表于 2022-11-6 20:44:57 | 只看该作者
hua_wuxin 发表于 2022-11-6 19:55
是我第二遍写错了,cmd.exe后面少了 /c 。你加上试试。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-25 04:18

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表