我正在尝试使用inno设置执行2个脚本。 我认为问题是包含空格的文件的路径。 脚本正在运行,因为我已经尝试了没有空格的硬编码路径,它确实有效。 有这个帖子,这个问题被描述,并添加了一个解决方案,但我已经尝试过,它不起作用。 这是主题Inno Setup, spaces and double quote in [Run]
为了不使用硬编码路径我正在使用inno设置常量,所以在输出文件夹中我有一个setup.exe和一个名为testfolder的文件夹,其中包含2个脚本,一个用于创建数据库,另一个用于创建数据库创建表格。 在inno设置中做了这个
connExe:=ExpandConstant('{tmp}')+'\sqlcmd.exe';
pathFx1:=ExpandConstant('{src}')+'\testfolder\teste.sql';
pathFx2:=ExpandConstant('{src}')+'\testfolder\idontimedb.des';
Exec(connExe,' -S DEV3\IDONICSYS4 -U sa -P idsysadmin -i \""'+connFx1+'\""', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
MsgBox(IntToStr(ResultCode), mbError, mb_Ok);
Exec(connExe,' -S DEV3\IDONICSYS4 -d MSSQLTIPS -U sa -P idsysadmin -i \""'+connFx2+'\""', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
MsgBox(IntToStr(ResultCode), mbError, mb_Ok);
当我运行两个消息框时显示代码2,但我仍然无法找到此代码的含义。 我认为我的问题是反斜杠和引号位置,但我已经尝试了不同的组合,它不起作用.. 谢谢你的帮助。
文件的完整路径是: C:\ Users \ hsilva \ Documents \ Inno setupo scripts \ Setup \ Output \ testfolder \ teste.sql \ create database
C:\ Users \ hsilva \ Documents \ Inno setupo scripts \ Setup \ Output \ testfolder \ idontimedb.des \ create tables
C:\ Users \ hsilva \ Documents \ Inno setupo scripts \ Setup \ Output \ setup.exe \ executable
提前感谢...
更新 - 2014年10月27日 所以当用户LTama消化时(再次感谢TLama)我已经检查了运行脚本所需的文件..并且需要的文件被评论,我做了一些更改,现在它给了我代码1.它是什么意思? 我使用此网站http://0x3f.org/blog/howto-execute-sql-scripts-in-inno-setup/中的代码并进行了一些更改。
in the files section i have got this:
Source: "C:\Users\hsilva\Documents\InnoSetup\sqlcmd.exe"; Flags: dontcopy ;
Source: "C:\Users\hsilva\Documents\InnoSetup\sqlcmd.rll"; Flags: dontcopy ;
我是否需要拥有这两个文件,因为在安装sql server 2008 r2时,这些文件是否已安装且可用?
在代码部分我得到了这个:
procedure DeinitializeSetup();
var
connExe:String;
connFx1:String;
begin
ExtractTemporaryFile('sqlcmd.exe');
ExtractTemporaryFile('sqlcmd.rll');
connExe:=ExpandConstant('{tmp}')+'\sqlcmd.exe';
connFx1:=ExpandConstant('{src}')+'\folder\teste.sql';
Exec(connExe,' -S DEV3\IDONICSYS4 -U sa -P idsysadmin -i \""'+connFx1+'\""', '', SW_HIDE, ewWaitUntilTerminated, ResultCode)
MsgBox(IntToStr(ResultCode), mbError, mb_Ok);
end;
end;
这是在设置结束时执行,我省略了一些检查,比如检查实例是否存在..
答案 0 :(得分:0)
这里我的想法...... 1.命令是否在Inno Setup Script之外工作?
使用LOG();
在命令窗口中测试字符串传递给exe。
将teste.sql解压缩到{tmp}
来源:" C:\ Users \ hsilva \ Documents \ InnoSetup \ teste.sql&#34 ;;标志:dontcopy;
function CustomForm_NextButtonClick(Page: TWizardPage): Boolean;
var
connExe:String;
connFx1:String;
connTxt:String;
ResultCode: Integer;
begin
// need to sql server in dropdown list
// sqlcmd -L > text.txt
ExtractTemporaryFile('sqlcmd.rll');
ExtractTemporaryFile('sqlcmd.exe');
connExe:=ExpandConstant('{tmp}')+'\sqlcmd.exe';
connTxt := ' -S ' + lstSqlServer.text + ' -U '+ txtUsername.Text + ' -P ' + txtPassword.Text + ' -Q "CREATE DATABASE ' + txtDatabase.Text + '"' + ' -o ' +
// use log to view and test the string in a command window
Log('The Value is connTxt: ' + connTxt );
if Exec(connExe, connTxt, '' , SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
//MsgBox(IntToStr(ResultCode), mbError, mb_Ok);
ExtractTemporaryFile('onestep2012.sql');
connFx1:=ExpandConstant('{tmp}\OneStep2012.sql');
connTxt := ' -S ' + lstSqlServer.text + ' -U '+ txtUsername.Text + ' -P ' + txtPassword.Text + ' -d ' + txtDatabase.Text + ' -i ' + connFx1 + ' -o ' + ExpandConstant('{tmp}\log.log');
Log('The Value is connTxt: ' + connTxt );
if Exec(connExe, connTxt, '' , SW_HIDE, ewWaitUntilTerminated, ResultCode) then
begin
MsgBox( 'The '+ txtDatabase.Text + ' OneStep Database is ready for use' , mbInformation, mb_Ok);
result := True;
end;
end;
end;