2011-08-11 88 views
2

我需要创建一个INNO安装脚本,这将允许我有一个对话框,用户可以输入序列号,然后我需要保存它们输入的序列号进入Windows注册表。C#WinForms应用程序的Inno安装脚本帮助

另外,如果他们没有输入序列号,则需要禁用下一个按钮,以便在他们不输入序列号时不能继续安装。

任何帮助将大大appriceated。

谢谢!

回答

1

下面是我在脚本中使用的简化示例。另外,请查看CheckSerial的InnoSetup文档(http://www.jrsoftware.org/ishelp/topic_setup_userinfopage.htm)。

; Script generated by the Inno Setup Script Wizard. 
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 

#define MyAppName "My Program" 
#define MyAppVersion "1.5" 
#define MyAppPublisher "My Company, Inc." 
#define MyAppURL "http://www.example.com/" 
#define MyAppExeName "MyProg.exe" 

[Setup] 
; NOTE: The value of AppId uniquely identifies this application. 
; Do not use the same AppId value in installers for other applications. 
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 
AppId={{6EAB4CDD-5D03-4EA1-BE97-7102D27CE955} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
;AppVerName={#MyAppName} {#MyAppVersion} 
AppPublisher={#MyAppPublisher} 
AppPublisherURL={#MyAppURL} 
AppSupportURL={#MyAppURL} 
AppUpdatesURL={#MyAppURL} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
OutputBaseFilename=setup 
Compression=lzma 
SolidCompression=yes 

[Registry] 
Root: HKCU; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty 
Root: HKCU; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey 
Root: HKLM; Subkey: "Software\My Company"; Flags: uninsdeletekeyifempty 
Root: HKLM; Subkey: "Software\My Company\My Program"; Flags: uninsdeletekey 
Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "User"; ValueData: "{userinfoname}" 
Root: HKLM; Subkey: "Software\My Company\My Program\Settings"; ValueType: string; ValueName: "SN"; ValueData: "{userinfoserial}" 

[Languages] 
Name: "english"; MessagesFile: "compiler:Default.isl" 

[Tasks] 
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 

[Files] 
Source: "MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion 
; NOTE: Don't use "Flags: ignoreversion" on any shared system files 

[Icons] 
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 

[Run] 
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, "&", "&&")}}"; Flags: nowait postinstall skipifsilent 

[Code] 
function CheckSerial(Serial: String): Boolean; 
var 
sTrial : string; 
sSerial : string; 

begin 
sTrial := 'trial'; 
sSerial := lowercase(Serial); 
    if (length(Serial) <> 25) AND (sTrial <> sSerial) then 
    Result := false 
    else 
    Result := true; 
end; 
+0

谢谢这工作得很好,但它不写入注册表设置...任何想法? –

+0

它是否创建任何密钥? – mirtheil

+0

只有HKLM中的那些,但我需要从C#WinForms应用程序中读取它们,其中用户不具有管理权限。所以我需要将设置存储在HKCU中。我似乎无法为HKCU编写任何密钥。 –

0

当您设置UserInfoPage = yes directivve时,Inno可以提示用户输入此信息。 如果您添加CheckSerial事件功能,它还会要求提供注册详细信息。

有关更多详细信息,请参阅帮助文件中的UserInfoPage页面。

相关问题