我找不到任何例子,所以我不确定这是否可行。我想做的是:
我想用数据库安装.NET C#windows服务。所以我的要求是客户机上的.NET Framework和SQL Server 2008。
所以,它必须看起来像这样:
我想在Inno设置中这样做。那可能吗?
答案 0 :(得分:3)
好吧,我可以帮助1和3。
要检查.NET框架,可以使用以下方法(如果需要,还将安装.NET框架)。我目前用它来检查.NET 2.0,但你可以改变它查找的版本来检查4.0。
[Files]
Source: Files\dotnetfx.exe; DestDir: {tmp}; Flags: ignoreversion; Check: NeedsFramework
[Run]
Filename: {tmp}\dotnetfx.exe; Parameters: "/q:a /c:""install /l /q"""; WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: Installing .NET Framework if needed. This may take several minutes.
[Code]
// .NET install helpers
// Indicates whether .NET Framework 2.0 is installed.
function IsDotNET20Detected(): boolean;
var
success: boolean;
install: cardinal;
begin
success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727', 'Install', install);
Result := success and (install = 1);
end;
//RETURNS OPPOSITE OF IsDotNet20Detected FUNCTION
//Remember this method from the Files section above
function NeedsFramework(): Boolean;
begin
Result := (IsDotNET20Detected = false);
end;
//IF SETUP FINISHES WITH EXIT CODE OF 0, MEANING ALL WENT WELL
//THEN CHECK FOR THE PRESENCE OF THE REGISTRY FLAG TO INDICATE THE
//.NET FRAMEWORK WAS INSTALLED CORRECTLY
//IT CAN FAIL WHEN CUST DOESN'T HAVE CORRECT WINDOWS INSTALLER VERSION
function GetCustomSetupExitCode(): Integer;
begin
if (IsDotNET20Detected = false) then
begin
MsgBox('.NET Framework was NOT installed successfully!',mbError, MB_OK);
result := -1
end
end;
请注意,此解决方案源自this article。您可以从microsoft网站下载dotnetfx for .NET 4.0。
对于第4步,我建议您创建一个安装在用户计算机上的工具/脚本,然后根据需要从“运行”部分调用该工具/脚本。
第2步将会变得棘手,但显然并非不可能。经过一些阅读后,似乎您可以向InnoSetup添加自定义UI页面。有关方法,请参阅帮助here。你在实际的UI页面中可以做多少工作我不确定。
值得注意的是,使用InnoSetup中的Pascal脚本,您或多或少可以完全访问Win32函数,还可以实例化COM对象,可以想象.NET库可以暴露COM接口....?
答案 1 :(得分:0)
Inno设置俱乐部所有设置文件并压缩成一个可执行文件。当您运行此可执行文件时,它会提取您在inno设置中包含的所有文件。我认为它不会自动运行您在setup.exe中包含的可执行文件。
或者,您也可以使用wix创建设置。 Wix设置也可以为.net framework 4.0构建。
答案 2 :(得分:0)
这是我用命令行oracle sqlplus执行sql脚本的示例代码 1.示例代码
[Dirs]
; Create folders at user side
Name: {app}\ScriptLog;
[Code]
///////////////////////////////////////////////////////////
//// Modify Sql function
//// TagName: the script line you want to modify tag name,
//// OldString: the old string,
//// NewString: the new string,
//// StringArr: the script strings array
///////////////////////////////////////////////////////////
function ModifySql(var TagStr, OldStr, NewStr: String; const StringArr: array of String): Boolean;
var
batPath: String;
tmpStr: String;
ResultCode: Integer;
i: Integer;
begin
result := false;
for i:= 0 to GetArrayLength(StringArr)-1 do
// if TagStr and OldStr are in the same line
if ( (StringArr[i] <> '') and (Pos(TagStr, StringArr[i]) > 0) and (Pos(OldStr, StringArr[i]) > 0) ) then
//replace OldStr with NewStr
StringChange(StringArr[i], OldStr, NewStr);
end;
///////////////////////////////////////////////////////////
//// Search ORA- Error function
//// the script exec result, for example : Error or ORA-xxxxx
///////////////////////////////////////////////////////////
function Check_Exec_Script_Result(var ErrStr, LogFile: String): Boolean;
var
LogFileLines: TArrayOfString;
ResultCode: Integer;
i: Integer;
begin
//assign sql file
//load strings and store to SqlFileLines
LoadStringsFromFile(LogFile, LogFileLines);
result := false;
for i:= 0 to GetArrayLength(LogFileLines)-1 do
// if TagStr and OldStr are in the same line
if ( (LogFileLines[i] <> '') and (Pos(ErrStr, LogFileLines[i]) > 0) ) then
MsgBox('Err' + LogFileLines[i] , mbError, MB_OK);
end;
///////////////////////////////////////////////////////////
//// execute Script with Sqlplus
///////////////////////////////////////////////////////////
procedure Exec_Script_Sqlplus(var dbTns, dbUser, dbPwd, scriptPath, batFileName: String);
var
batPath: String;
tmpStr: String;
ResultCode: Integer;
LogFileName: String;
ErrStr: String;
begin
// generate bat file
batPath := ExpandConstant('{tmp}\' + batFileName + '.bat');
tmpStr := 'cd \' + ''#13''#10;
SaveStringToFile(batPath, tmpStr, False);
//tmpStr := 'quit | sqlplus ' + dbUser + '/' + dbPwd + '@' + dbTns + ' @' + scriptPath + ''#13''#10;;
tmpStr := 'echo quit | sqlplus ' + dbUser + '/' + dbPwd + '@' + dbTns + ' @' +'"'+ scriptPath +'"'+ ''#13''#10;
SaveStringToFile(batPath, tmpStr, True);
// set log file path
LogFileName := ExpandConstant('E:\123\' + batFileName + '.txt');
//MsgBox(batPath, mbError, MB_OK);
if Exec(batPath, ' > "' + LogFileName + '"', '', 1, ewWaitUntilTerminated, ResultCode) then
begin
// handle success if necessary; ResultCode contains the exit code
if (ResultCode = 0) then begin
ErrStr := 'ORA';
Check_Exec_Script_Result(ErrStr, LogFileName);
// open ScriptLog file
ShellExec('', ExpandConstant(LogFileName),'', '', SW_SHOW, ewNoWait, ErrorCode)
//MsgBox('OK', mbError, MB_OK);
//result := true;
end;
end
else begin
MsgBox('Exec:' + scriptPath + 'fail,please check parameters setting', mbError, MB_OK);
//handle failure if necessary; ResultCode contains the error code
end;
end;
///////////////////////////////////////////////////////////
//// 1. Set Sql Script Parameters ,ex: DB TNS,Account,PWD
//// 2. Call function ModifySql, to modify Sql Script
//// 3. Call function Exec_Script_Sqlplus, to exec Sql Script with sqlplus
///////////////////////////////////////////////////////////
procedure SetSql_ExecSqlScript();
var
SqlFile: String;
OldString: String;
NewString: String;
TagName: String;
batFileName: String;
SqlFileLines: TArrayOfString;
LocalInfoPath: String;
LocalInfoLines: TArrayOfString;
LocalInfoStr: String;
i: Integer;
begin
//assign sql file
//========================start of 1_Sample_system.sql========================
SqlFile := WizardDirValue() + '\SQL\1_Sample_system.sql';
//create bat file
batFileName := '1_Sample_system';
//load strings and store to SqlFileLines
LoadStringsFromFile(SqlFile, SqlFileLines);
//set modify parameters
TagName := 'CREATE USER';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'GRANT CREATE';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'GRANT CONNECT';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'ALTER USER';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
TagName := 'IDENTIFIED';
OldString := '1234abcd';
NewString := DBAppPwd;
ModifySql(TagName, OldString, NewString, SqlFileLines);
//save modified strings to file
SaveStringsToFile(SqlFile, SqlFileLines, False);
//Exec Script with Sqlplus
Exec_Script_Sqlplus(DBSystemTNS, DBSystemUser, DBSystemPwd, SqlFile , batFileName);
//========================end of 1_Sample_system.sql========================
//========================start of 2_Sample_create_schema.sql========================
SqlFile := WizardDirValue() + '\SQL\2_Sample_create_schema.sql';
//create bat file
batFileName := '2_Sample_create_schema';
//Exec Script with Sqlplus
Exec_Script_Sqlplus(DBAppTNS, DBAppUser, DBAppPwd, SqlFile , batFileName);
//========================end of 2_Sample_create_schema.sql========================
//========================start of 3_Sample_insert_data.sql========================
SqlFile := WizardDirValue() + '\SQL\3_Sample_insert_data.sql';
//create bat file
batFileName := '3_Sample_insert_data';
//Exec Script with Sqlplus
Exec_Script_Sqlplus(DBAppTNS, DBAppUser, DBAppPwd, SqlFile , batFileName);
//========================end of 3_Sample_insert_data.sql========================
//========================start of 4_Sample_drop_schema.sql========================
SqlFile := WizardDirValue() + '\SQL\4_Sample_drop_schema.sql';
//create bat file
batFileName := '4_Sample_drop_schema';
//load strings form file
LoadStringsFromFile(SqlFile, SqlFileLines);
//set modify parameters
TagName := 'DROP USER';
OldString := 'Sample';
NewString := DBAppUser;
ModifySql(TagName, OldString, NewString, SqlFileLines);
//save modified strings to file
SaveStringsToFile(SqlFile, SqlFileLines, False);
//Exec Script with Sqlplus
//Exec_Script_Sqlplus(DBSystemTNS, DBSystemUser, DBSystemPwd, SqlFile , batFileName);
//========================end of 4_Sample_drop_schema.sql========================
end;
答案 3 :(得分:0)
这是我用命令行oracle sqlplus
执行sql脚本的示例代码2.有四个基础sql脚本