私は中小企業庁のプログラマーです。SBA は、いくつかのプログラムを作成し、借り手と貸し手に無料で提供します。以下のインストール コードは、エンド ユーザー マシン用の無料プログラムの 1 つです。
私は自分の問題の解決策を 1 週間探した後、必要なことをプログラミングする方法を学ぶ必要があると判断しました。私は Pascal と Inno Setup の完全な初心者です。コードを盗み出し、このサイトや他のサイトのすべての例をテストしました。すべての助けをありがとう。何度も修正してテストしました。以下は私のコードです。
注: 他の人に役立つことを期待してこれを提供していますが、計画どおりには機能しません。うまくいけば、他の人の助けを借りて投稿された実用的なバージョンがあるでしょう. 私が苦労して学んだことを他の人が理解できるように、コード全体を提供しました。;-)
質問: [Code] セクションが繰り返されることを除いて、インストールは完全に機能します。[Files] セクションの {code:GetInstallDirectory} 呼び出しに到達する前に、GetInstallDirectory を少なくとも 1 回実行し
Word 14 の If ステートメントを 1 回実行し、[Files] セクションを 1 回実行します。「MsgBox ('1. Setup...」というメッセージが 2 回表示されます。以前は 3 回または 4 回表示されていましたが、覚えていない変更を加えたため、現在は 2 回しか実行されません。
誰でも問題を見つけるのを手伝ってもらえますか? おそらくそれは If,Then,Else ステートメントの場合です。次に、ステートメントの順序である可能性があります。前もって感謝します。
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
; Script written by Daniel H. Smith, Lead Programmer/Analyst, Base Technologies
; Washington, DC
#define MyAppName "IDAP mini-Wizard"
#define MyAppVersion "v 2013"
#define MyAppPublisher "Small Business Administration"
#define MyAppURL "http://www.sba.gov/"
#define MyAppExeName "IDAPv2013.exe"
#define MyAppCopyright "(c) 2013-2014"
[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={{459E8784-C110-4348-A294-229C58CB00D2}
AppName={#MyAppPublisher}'s {#MyAppName} {#MyAppVersion}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
AppCopyright={#MyAppCopyright}
DefaultDirName={app}
CreateAppDir=false
OutputDir=C:\Users\Dan\Documents\IDAP Development\Setup
OutputBaseFilename=IDAPv2013Setup
SetupIconFile=C:\Users\Dan\Documents\My Shapes\_private\folder.ico
Compression=lzma
SolidCompression=true
UsePreviousGroup=false
UsePreviousAppDir=false
InfoBeforeFile=C:\Users\Dan\Documents\IDAP Development\Setup\IDAPInfo.txt
WizardImageFile=compiler:WizModernImage-IS.bmp
WizardSmallImageFile=compiler:WizModernSmallImage-IS.bmp
InfoAfterFile=C:\Users\Dan\Documents\IDAP Development\Setup\IDAPWord.txt
AppContact=Auth-IDAP@sba.gov
PrivilegesRequired=none
RestartIfNeededByRun=False
VersionInfoVersion=1.0
VersionInfoCompany={#MyAppPublisher}
VersionInfoCopyright={#MyAppCopyright}
[Languages]
Name: english; MessagesFile: compiler:Default.isl
[Files]
Source: "C:\Users\Dan\Documents\IDAP Development\IDAP 2013 Boilerplate_V10.Clean.pdf"; DestDir: "{userdocs}\IDAP Documents"; Flags: ignoreversion
Source: "C:\Users\Dan\Documents\IDAP Development\IDAP Borrower Certification (9-25-12)(initials) final.docx"; DestDir: "{userdocs}\IDAP Documents"; Flags: ignoreversion
Source: "C:\Users\Dan\Documents\IDAP Development\IDAP Loan Note (Draft July 25).docx"; DestDir: "{userdocs}\IDAP Documents"; Flags: ignoreversion
Source: "C:\Users\Dan\AppData\Roaming\Microsoft\Templates\IDAPLoan2013.dotm"; DestDir: "{code:GetInstallDirectory}"; DestName: "IDAPWizard2013v111.dotm"; Flags: confirmoverwrite
[Messages]
// define wizard title and tray status msg
// both are normally defined in innosetup's default.isl (install folder)
SetupAppTitle = Install {#MyAppName} {#MyAppVersion}
SetupWindowTitle = Install {#MyAppName} {#MyAppVersion} -- {#MyAppPublisher}
[Run]
//Opens Word if User leaves checkbox checked on Finish
Filename: "{code:GetWordDirectory}"; Flags: postinstall; Description: "Open Word after Finish"; StatusMsg: "Opening Word ..."
[Code]
function GetWordDirectory(S: string) : String;
Begin
IF RegKeyExists(HKCU, 'Software\Microsoft\Office\14.0\Common\General') THEN BEGIN
Result := ExpandConstant('{pf32}\Microsoft Office\Office14\winword.exe');
end Else begin
Result := ExpandConstant('{pf32}\Microsoft Office\Office12\winword.exe');
end;
End;
//--------
function GetInstallDirectory(S: String) : String;
var installDirectory : String;
Version: TWindowsVersion;
Begin
//Word 14 Start
IF RegKeyExists(HKCU, 'Software\Microsoft\Office\14.0\Common\General') THEN BEGIN
GetWindowsVersionEx(Version);
if RegQueryStringValue(HKCU, 'Software\Microsoft\Office\14.0\Common\General', 'UserTemplates', installDirectory) then begin
//Successfully read the registry value
If (Version.Major = 6) and (Version.Minor = 1) and (Version.ProductType = VER_NT_WORKSTATION) //Windows 7
then begin
MsgBox ('1. Setup is installing to Word User Templates directory for: '+#10+#13+#10+#13+'---> Word 2010 and Windows 7 <---', mbInformation, MB_OK);
Result := installDirectory
end else begin //begin c2
//FAILED READING USERTEMPLATES DIRECTORY
//Windows <= 6.0 Not Windows 7 and above
If (Version.Major = 6) and (Version.Minor = 0) and (Version.ProductType = VER_NT_WORKSTATION) //Windows Vista or XP
then begin
MsgBox ('2. Setup is installing to Word default template directory for: '+#10+#13+#10+#13+'---> Word 2010 and Windows 7 <---', mbInformation, MB_OK);
Result := ExpandConstant('C:\Users\{username}\AppData\Roaming\Microsoft\Templates');
end else
MsgBox ('3. Setup is installing to Word default template directory for: '+#10+#13+#10+#13+'---> Word 2010 and Windows Vista/XP <---', mbInformation, MB_OK);
Result := ExpandConstant('C:\Documents and Settings\{username}\Application Data\Microsoft\Templates');
end;
end;
//End Word 14
//Start Word 12
END ELSE IF RegKeyExists(HKCU, 'Software\Microsoft\Office\12.0\Common\General') THEN BEGIN
GetWindowsVersionEx(Version);
if RegQueryStringValue(HKCU, 'Software\Microsoft\Office\12.0\Common\General', 'UserTemplates', installDirectory) then begin
// Successfully read the value
If (Version.Major = 6) and (Version.Minor = 0) and (Version.ProductType = VER_NT_WORKSTATION) //Windows 7
then begin //c3
MsgBox ('4. Setup is installing to Word User Templates directory for: '+#10+#13+#10+#13+'---> Word 2007 and Windows 7 <---', mbInformation, MB_OK);
Result := installDirectory
end else begin //begin c4
//FAILED READING VALUE
If (Version.Major = 6) and (Version.Minor = 0) and (Version.ProductType = VER_NT_WORKSTATION) //Windows Vista/XP
then begin
MsgBox ('5. Setup is installing to Word User Templates directory for: '+#10+#13+#10+#13+'---> Word 2007 and Windows 7 <---', mbInformation, MB_OK);
Result := ExpandConstant('C:\Users\{username}\AppData\Roaming\Microsoft\Templates');
end else
MsgBox ('6. Setup is installing to Word default templates directory for: '+#10+#13+#10+#13+'---> Word 2007 and Windows XP or Vista <---', mbInformation, MB_OK);
Result := ExpandConstant('C:\Documents and Settings\{username}\Application Data\Microsoft\Templates');
end;
end;
END;
//End Word 12
end; //Function GetInstallDirectory end
//End All
//------------------------------------------------------------------------------
//Following are reference notes
//How to code a if-elseif-else
// if condition then begin
// ...
// end else if condition then begin
// ...
// end else begin
// ...
// end;
//+------------+------------+-------+-------+---------+
//| Version | PlatformId | Major | Minor | Release |
//+------------+------------+-------+-------+---------+
//| Win32s | 0 | ? | ? | |
//| Win95 | 1 | 4 | 0 | 1995 08 |
//| Win98 | 1 | 4 | 10 | 1998 06 |
//| WinME | 1 | 4 | 90 | 2000 09 |
//| WinNT351 | 2 | 3 | 51 | 1995 04 |
//| WinNT4 | 2 | 4 | 0 | 1996 07 |
//| Win2000 | 2 | 5 | 0 | 2000 02 |
//| WinXP | 2 | 5 | 1 | 2001 10 |
//| Win2003 | 2 | 5 | 2 | 2003 04 |
//| WinXPx64 | 2 | 5 | 2 | 2003 03 |
//| WinCE | 3 | ? | ? | |
//| Vista | 2 | 6 | 0 | 2007 01 |
//| Win2008 | 2 | 6 | 0 | 2008 02 |
//| Win2008R2 | 2 | 6 | 1 | 2009 10 |
//| Win7 | 2 | 6 | 1 | 2009 10 |
//+------------+------------+-------+-------+---------+
//Word Templates default subdirectory before Windows 7
//C:\Documents and Settings\"user name"\Application Data\Microsoft\Templates\
//Word Templates default subdirectory after Windows 7
//C:\Users\"username"\AppData\Roaming\Microsoft\Templates\
//
//For MS Word WinWord.Exe location and registry entry
//HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Options
//C:\Program Files (x86)\Microsoft Office\Office14\ -- For Word 14
//MS Word 14 UserTemplates registry
//HKCU, 'Software\Microsoft\Office\14.0\Common\General', 'UserTemplates'
//MS Word 12 UserTemplates registry
//HKCU, 'Software\Microsoft\Office\12.0\Common\General', 'UserTemplates'
//------------------------------------------------------------------------------