我正在尝试更新我的一个脚本以使用Inno Setup的Unicode版本.不幸的是我遇到了一个问题,StringChangeEx期望看到一个unicode String而不是我需要的AnsiString(不匹配的类型).是否有另一种方法可以从Unicode Inno Setup中替换匹配的AnsiStrings?
我正在使用WizardDirValue()
以避免必须一直打字ExpandConstant('{app}\')
,万一有人想知道为什么.
var
AnsiData: AnsiString;
begin
LoadStringFromFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
{ Type mismatch, StringChangeEx expects String which is Unicode }
StringChangeEx(AnsiData, 'current', 'replace', True);
SaveStringToFile(WizardDirValue() + '\legacyansi.conf', AnsiData)
end;
Run Code Online (Sandbox Code Playgroud) 我有以下 .iss 脚本来编译我正在开发的使用 .NET 5.0 的游戏启动器。目前,它每次都会尝试从安装程序安装 .NET 5.0,而不是先检查是否需要。我找到了大量资源来告诉您如何针对 .NET Framework 执行此操作,但几乎没有找到针对 .NET 5.0(.NET Core 的更新版本)的资源。在尝试安装 .NET 5.0 之前,如何检查它是否已安装?
我还知道 5.0 即将结束,但我使用的是 Visual Studio 2019,6.0 与它不兼容,并且不希望使用任何变通办法来让 2019 与它配合。
#define AppName "LowPoly Games Launcher"
#define AppEXEName "LPG Launcher.exe"
[Setup]
AppName={#AppName}
[Files]
Source: "..\bin\Release\net5.0-windows\*"; DestDir: "{app}"; \
Flags: ignoreversion recursesubdirs;
Source: "Resources\windowsdesktop-runtime-5.0.17-win-x64.exe"; \
DestDir: "{app}"; Flags: ignoreversion deleteafterinstall
[Run]
Filename: "{app}\{#AppEXEName}"; \
Description: "{cm:LaunchProgram, {#StringChange(AppName, '&', '&&')}}"; \
Flags: nowait postinstall
Filename: "{app}\windowsdesktop-runtime-5.0.17-win-x64.exe"; \
Parameters: "/q/passive"; Flags: waituntilterminated; \
StatusMsg: Microsoft .NET Framework …
Run Code Online (Sandbox Code Playgroud) 我在这里看到了这个问题:如何在Inno Setup中获得Exec'ed程序的输出?
但我不能让它自己工作,注释掉的代码是我尝试使这项工作,但我使用了一个bat文件,因为我无法使我的重定向工作.CacheInstanceName
并且CacheInstanceDir
是在别处定义的全局变量:
function CheckCacheExists(): Integer;
var
args: String;
buffer: String;
ResultCode: Integer;
begin
// args := 'qlist ' + CacheInstanceName + ExpandConstant(' nodisplay > {tmp}\appcheck.txt');
// MsgBox(args, mbInformation, MB_OK);
// Exec(CacheInstanceDir + '\bin\ccontrol.exe', 'qlist ' + CacheInstanceName + ExpandConstant(' nodisplay > "{tmp}\appcheck.txt"'), '', SW_SHOW,
ExtractTemporaryFile('checkup.BAT');
Exec(ExpandConstant('{tmp}\checkup.BAT'), CacheInstanceDir + ' ' +
CacheInstanceName + ' ' + ExpandConstant('{tmp}'), '', SW_SHOW,
ewWaitUntilTerminated, ResultCode);
LoadStringFromFile(ExpandConstant('{tmp}\appcheck.txt'),buffer);
if Pos('^', buffer) = 0 then
begin
Result := 0
end
else …
Run Code Online (Sandbox Code Playgroud)