【问题标题】:Inno Setup Batch file Check for privileges using cacls failsInno 设置批处理文件使用 cacls 检查权限失败
【发布时间】:2016-09-20 12:39:30
【问题描述】:

我尝试在安装完成后执行一个批处理文件。

Filename: "{cmd}"; Parameters: "/C ""{app}\Start.bat"""; \
    Description: {cm:LaunchAfterInstallQuest_lbl}; \
    Flags: nowait postinstall skipifsilent shellexec;

批处理文件start.bat 正在请求管理权限并启动两个服务。

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
    cscript //E:JScript //nologo "%~f0"
    @goto :EOF
)

REM --> start services
set error=0
set date=%date%_%time:~0,2%-%time:~3,2%-%time:~6,2%

net start "SMC Integrationsserver" 2>>"%~dp0logfile_start_%date%.txt"
IF ERRORLEVEL 1 ( set error=1 )

net start "Wildfly" 2>>"%~dp0logfile_start_%date%.txt"
IF ERRORLEVEL 1 ( set error=1 )

if %error%==1 ( 
echo Ein Fehler trat auf, bitte pruefen Sie die Logdatei "%~dp0logfile_start_%date%.txt"
pause
@goto :EOF
)
if %error%==0 (
del /s /q "%~dp0logfile_*.txt"
)

@goto :EOF
@end @ELSE
ShA=new ActiveXObject("Shell.Application")
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+"\"","","runas",1);
@end

当我在安装程序中单击完成时,start.bat 文件正在无限循环中执行。

有什么想法吗?

【问题讨论】:

  • 这太过分了。你为什么使用如此丑陋的黑客在批处理文件中请求管理员权限?为什么不从安装程序的提升环境启动服务?

标签: batch-file inno-setup


【解决方案1】:

首先,这太过分了。直接从脚本的[Run] 部分运行net start(或至少是批处理文件),不带postinstall 标志。这样net start(或批处理文件)就会以提升的权限启动。而且您不需要使用那种丑陋、容易出错且难以调试的 hack,将两种语言组合在一个文件中。

使用“任务”使运行可由用户配置。


无论如何,批处理文件循环,因为 Inno Setup 是 32 位应用程序,所以它默认启动 32 位 cmd.exe,在 64 位系统上看不到 C:\WINDOWS\system32\config\system。这是因为对于在 64 位系统上运行的 32 位进程,C:\WINDOWS\system32 被重定向到 C:\WINDOWS\SysWOW64,其中没有 config 子目录。所以cacls.exe 失败了

系统找不到指定的文件。


有关详细信息和解决方案(在您的情况下是黑客),请参阅这些问题:

【讨论】:

  • 谢谢你马丁。我想做的是创建一个文件来启动和停止我的两个服务。用户可以设置复选框,安装或不启动服务,这就是我使用postinstall标志的原因。有了桌面上的这个文件,每个用户都可以使用它,但它需要提升权限才能启动服务。
  • 首先,我相信answer to How can I auto-elevate my batch file, so that it requests from UAC administrator rights if required? 提供了更好的解决方案 - 无论如何,我已经向您展示了如何修复您当前的脚本(或者更确切地说,如何修复您运行当前脚本的方式)。
  • 虽然一般来说,我会使用我建议的方式(任务)。对于桌面快捷方式,我最好使用快捷方式的“以管理员身份运行”高级属性(但我承认,我不知道如何在 Inno Setup 中进行设置)。
  • 我用你最后的评论解决了这个问题。你可以像这样在注册表中使用innoSetup设置快捷方式的“以管理员身份运行”标志(stackoverflow.com/questions/16083187/…
  • 这是否意味着您甚至可以为批处理文件设置AppCompatFlags,而不仅仅是.exe?
猜你喜欢
  • 2015-05-21
  • 2017-01-24
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多