使用管理员权限从Inno Setup安装程序运行批处理文件

时间:2015-03-18 14:10:16

标签: admin inno-setup sqlcmd elevated-privileges

如果是一个安装程序,需要一个小脚本来恢复数据库和用户。这是一个sqlcmd脚本,需要管理员权限。

但我无法在安装程序(runascurrentuser和/或PrivilegesRequired=admin)中使用它。如果我以管理员身份手动运行它,它确实有效。

代码:

[Setup]
PrivilegesRequired=admin 

[Run]
Filename: "{app}\DBenUser.cmd"; Components: DbenUser; Flags: runascurrentuser;  StatusMsg: net 2 moveanduser wordt geinstaleerd even geduld...

我看到有关注册表的事情是这样的吗?

基本上这是一个很小的sqlcmd脚本来恢复一些db文件并创建一个用户。

CD\
Net stop MSSQL$NET2
Net stop Net2ClientSvc
MOVE /Y "C:\Program Files\IQ Soft\Net2_Data.MDF" "C:\Net2 Access Control\Net2_Data.MDF"
MOVE /Y "C:\Program Files\IQ Soft\Net2_Log.LDF" "C:\Net2 Access Control\Net2_Log.LDF"
MOVE /Y "C:\Program Files\IQ Soft\Net2Archive_Data.MDF" "C:\Net2 Access Control\Net2Archive_Data.MDF"
MOVE /Y "C:\Program Files\IQ Soft\Net2Archive_Log.LDF" "C:\Net2 Access Control\Net2Archive_Log.LDF"
MOVE /Y "C:\Program Files\IQ Soft\Net2Events_Data.MDF" "C:\Net2 Access Control\Net2Events_Data.MDF"
MOVE /Y "C:\Program Files\IQ Soft\Net2Events_Log.LDF" "C:\Net2 Access Control\Net2Events_Log.LDF"

Net stop MSSQL$NET2
Net stop Net2ClientSvc
Net start MSSQL$NET2 /m

SQLCMD -S localhost\net2 -Q "CREATE LOGIN b4tmm WITH PASSWORD='b4tmm'"
SQLCMD -S localhost\net2 -Q "SP_ADDSRVROLEMEMBER 'b4tmm', 'SYSADMIN'" 

net stop  MSSQL$NET2
net start MSSQL$NET2
net start Net2ClientSvc

这些是sqlcmd文件在innosetup中使用的所有内容(文件名为DBenUser.cmd):

[Types]    
Name: "Compleet"; Description: "IQ Soft Compleet"                      
Name: "Client"; Description: "IQ Soft Client"

[Components]
Name: "DbenUser"; Description: "DbenUser "; Types: Compleet;

[Files]

Filename: "{app}\DBenUser.cmd"; Components: DbenUser; Flags: runascurrentuser;  StatusMsg: net 2 moveanduser wordt geinstaleerd even geduld...

[Eddited]

我通过取消选中innosetup中的所有组件来测试管理员权限,除了sqlcmd脚本(并在vm ware的快照上运行,其中安装了所有其他程序,只需要脚本来完成安装)。如果我作为第一个/唯一的程序运行它我的安装程序它的工作原理(所以管理员权限是正常的(也通过将文件移动到带有cmd脚本的管理员文件夹来测试)。之后我再次测试了完成安装其他组件处于活动状态并且无法正常工作。在安装了所有其他组件之后,安装程序似乎以某种方式失去了管理员权限.cmd给出了错误: SQLCMD是未被识别为内部或外部命令,程序或批处理文件

    SQLCMD -S localhost\net2 -Q "CREATE LOGIN b4tmm WITH PASSWORD='b4tmm'"
    SQLCMD -S localhost\net2 -Q "SP_ADDSRVROLEMEMBER 'b4tmm', 'SYSADMIN'" 

(其他组件是.net 4,5,Paxton(net2),Sql manager 2012,Sql express 2012,Crystal报告,SQLCMD脚本顺序)

任何人都有任何想法?我此时无能为力

其他信息

[Files]
Source: "C:\Users\Chris V\Desktop\IQ-Soft\IQ-Soft.exe"; DestDir: "{app}"; Components: IQ_soft;
Source: "C:\Users\Chris V\Desktop\IQ-Soft\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "C:\Users\Chris V\Desktop\IQ-Soft\IQ-Soft Setup.exe"; DestDir: "{app}"; Components: IQ_Database
;----------------------------------------------------------------------------------------------------------------------------------------
Source: "C:\Users\Chris V\Desktop\Net4\dotNetFx45_Full_setup.exe"; DestDir: {tmp}; 
;----------------------------------------------------------------------------------------------------------------------------------------
;Source: "C:\Users\Chris V\Desktop\crystal reports\crystalreports.msi"; DestDir: {tmp}; Components: CrystalReports
;----------------------------------------------------------------------------------------------------------------------------------------
Source: "C:\Users\Chris V\Desktop\Paxton\SetupPaxton.exe"; DestDir: {tmp}; Components: Paxton;
;----------------------------------------------------------------------------------------------------------------------------------------
;Source: "C:\Users\Chris V\Desktop\Sdk\RedistOEM.msi"; DestDir: {tmp}; Components: Sdk;
;----------------------------------------------------------------------------------------------------------------------------------------
Source: "C:\Users\Chris V\Desktop\Sql expr\SQLEXPR.exe"; DestDir: {tmp}; Components: Sqlexpress;
Source: "C:\Users\Chris V\Desktop\Sql expr\SQLMANG.exe"; DestDir: {tmp}; Components: Sqlman;
;----------------------------------------------------------------------------------------------------------------------------------------
Source: "C:\Users\Chris V\Desktop\Net2\Net2Databaseschoon\*"; DestDir: "{app}"; Components: Net2DB;
;Source: "C:\Users\Chris V\Desktop\Net2\handleiding.odt"; DestDir: "{app}"; Components: Handleiding;
Source: "C:\Users\Chris V\Desktop\Net2\DBenUser.cmd"; DestDir: "{app}"; Components: DbenUser;

[Run]
Filename:  {tmp}\dotNetFx45_Full_setup.exe; Parameters: "/q:a /c:""install /l /q""";  StatusMsg: Microsoft Framework 4.5 wordt geinstaleerd even geduld...
;-------------------------------------------------------------------------------------
Filename:   {tmp}\SetupPaxton.exe;Components: Paxton; StatusMsg: Paxton wordt geinstaleerd even geduld...
;Filename:  {tmp}\RedistOEM.msi;Components: Sdk; Flags: shellexec waituntilterminated; StatusMsg: Sdk wordt geinstaleerd even geduld...
;-------------------------------------------------------------------------------------
Filename: {tmp}\SQLMANG.exe;Components: Sqlman; StatusMsg: SQL Manager wordt geinstaleerd even geduld... 
Filename:  {tmp}\SQLEXPR.exe;Components: Sqlexpress; StatusMsg: Sql express wordt geinstaleerd even geduld...
;-------------------------------------------------------------------------------------
;Filename:  {tmp}\crystalreports.msi;Components: CrystalReports; Flags: shellexec waituntilterminated ;  StatusMsg: Crystal reports wordt geinstaleerd even geduld...
;------------------------------------------------------------------------------------- 
Filename: "{app}\DBenUser.cmd"; Components: DbenUser; Flags: runascurrentuser;  StatusMsg: net 2 moveanduser wordt geinstaleerd even geduld...

2 个答案:

答案 0 :(得分:1)

我尝试创建最简单的安装程序,安装单个.cmd文件并运行它:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
Source: "test.cmd"; DestDir: {app}

[Run]
FileName: "{app}\test.cmd"; StatusMsg: "running cmd"

test.cmd就像:

echo a > c:\admintestfile
dir c:\admintestfile
pause

如果没有管理员权限,我无法写入c:\

正如预期的那样,批处理文件成功,因为它以管理员权限运行(只要安装程序本身就是这样),正如预期的那样:


所以可能还有其他东西,特别是关于批处理文件的东西,会导致你的问题。

答案 1 :(得分:1)

在脚本中,您必须包含程序的完整路径。例如。

  

%WINDIR%\ SYSTEM32 \ NET.EXE

然后它有效。