2016-09-20 66 views
0

我嘗試在安裝完成後執行批處理文件。Inno Setup批處理文件檢查使用cacls失敗的權限

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文件是在一個無限循環執行。

任何想法有什麼不對?

+0

這這樣的矯枉過正。爲什麼你要在批處理文件中使用如此醜陋的黑客請求管理員權限?你爲什麼不從安裝程序的高級環境啓動服務? –

回答

0

首先,這種矯枉過正。運行net start(或至少批處理文件)直接形成腳本的[Run]部分,而不需要postinstall標誌。這樣net start(或批處理文件)以提升的權限啓動。而且,您不需要在單個文件中將兩種語言組合起來使用那種醜陋,容易出錯且難以調試的黑客攻擊。

使用「任務」使用戶可以配置運行。


無論如何,批處理文件循環,因爲創新安裝是32位應用程序,所以它由缺省情況下,不能看到C:\WINDOWS\system32\config\system在64位系統開始32位cmd.exe。這是因爲對於在64位系統上運行的32位進程,C:\WINDOWS\system32被重定向到C:\WINDOWS\SysWOW64,其中沒有config子目錄。因此cacls.exe失敗

系統找不到指定的文件。


詳見及解決這些問題(黑客你的情況):

+0

謝謝你,馬丁。我試圖做的是創建一個文件來啓動和停止我的兩個服務。用戶可以設置複選框,以便在安裝後啓動服務或不,這就是爲什麼我使用'postinstall'標誌。通過桌面上的這個文件,每個用戶都可以使用它,但它需要提升權限才能啓動服務。 –

+0

首先,我相信這[回答如何自動提升我的批處理文件,以便它從UAC管理員權限請求?(http://stackoverflow.com/a/12264592/850848)提供了一個更好的解決方案 - 無論如何,我已經向您展示瞭如何修復您當前的腳本(或者更確切地說,如何修復您運行當前腳本的方式)。 –

+0

雖然一般情況下,我會用我建議的方式(任務)。對於桌面快捷方式,我最好使用快捷方式的「以管理員身份運行」高級屬性(但我承認,我不知道如何在Inno Setup中設置它)。 –

相關問題