Dafür müssen Sie die Skripte zum Teil in sogenannte Folder Level Scripts auslagern, die dann auf dem jeweiligen PC erst mal installiert werden müssen.
Das klappt in eigenem Büro meist noch ohne großen Aufwand.
Aber was, wenn sie ihre Dateien an Kunden verteilen, die von sowas keine Ahnung haben oder denen das zu aufwendig ist.
Ganz klar, bauen sie einen Setup, der das alles erledigt.
Dafür empfiehlt sich zum Beispiel die Freeware Inno Setup.
Durch diverse Zusatzprogramme ist es ein mächtiges Tool, mit dem sie sehr umfangreiche Installer mit professionellen Touch erstellen können.
Diese Methode bietet einigen Vorteile.
So können Sie beliebig viele Dateien unterschiedlichsten Typs mit nur einer Setup-Datei verteilen, die Benutzer brauchen lediglich den Setup einmal ausführen, um alles an seinem Platz zu haben und über die Deinstallationsroutine können sie auch alles auf einmal wieder entfernen.
Dieses Beispiel zeigt ihnen einen Installer, der prüft, ob ein Adobe Reader oder Acrobat installiert ist, dann den Pfad zu deren JavaScript-Ordner erstellt und ein Folder Level Script sowie einige XFA-Formulare installiert.
Der Installer ist zudem zweisprachig ausgelegt (deutsch und englisch) und mit eigenem Layout versehen.
Und das alles braucht weniger als 150 Zeilen Code.
Security is neccessary but causes other problems. Ic you work with forms and scripts you will learn that Acrobat or Reader allow the usage of interessting functions such as "saveAs" only from trusted enviromments.
Therefore you have to writhe part of your scripts into so called folder level scripts which have to be installed on each induvidual computer first.
In a office this maybe not the problem.
But what if your distribute your forms to customers who don't know how to install those files or don't want?
You will have to build a setup that will do this automatically.
Therefore the freeware Inno Setup is advisable.
With a lot of extensions available it's a powerful tool to create comprehensive installers with a professional touch.
This method offers several advantages.
You can distribute any number of files with different file types at once with only one setup-file.
Also, the users only need to execute the setup once to have everything in the right place and with the uninstall routine they also can remove all at once.
This example shows an installer that checks if there is an Adobe Reader or Acrobat installed.
If so it generates the path to the JavaScrips folder and installs a Folder Level Script and some XFA forms.
Also, the installer is multiligual (german and english) and has its own layout.
All done with less that 150 lines of code.
LCB Sample Installer:
1: Sprache auswählen // Select language
2: Installer prüft ob Acrobat/Reader installiert ist // Installer checks if Acrobat/Reader is installed
3: Installationsassistent startet // Install wizard runs
4: Aufgaben des Setups auswählen // Select task for the setup
5: Installation wird durchgeführt // Installation proceeds
6: Setup abschließen // Complete setup
7: Installierte Dateien im Programme-Menü // Installed files in the program menu
8: Installiertes Folder Level Script // Installed folder level script
Inno Setup Code:
; LCB Installer Script
#define MyAppName "LCB"
#define MyAppVerName "1.0"
[Setup]
AppId={{536B756A-54AA-4C37-8ADA-0C942B8327E7}
AppName={#MyAppName}
AppVerName={#MyAppName} {#MyAppVerName}
VersionInfoVersion={#MyAppVerName}
AppPublisher=Your Name Here
AppComments=
AppPublisherURL=
AppSupportURL=
AppUpdatesURL=
AppCopyright=
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=yes
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
InfoAfterFile=SourceFiles\LCB_ReadMe.rtf
OutputDir=FinalFiles
OutputBaseFilename={#MyAppName}_Sample_Installer_{#MyAppVerName}
Compression=lzma
SolidCompression=yes
SetupIconFile=SourceFiles\LCB_Icon.ico
UninstallDisplayIcon=SourceFiles\LCB_Uninstall_Icon.ico
UninstallDisplayName={#MyAppName} {#MyAppVerName}
WizardImageFile=SourceFiles\LCB_Wizard_164x314.bmp
WizardSmallImageFile=SourceFiles\LCB_Wizard_55x55.bmp
[Languages]
Name: en; MessagesFile: compiler:Default.isl
Name: de; MessagesFile: compiler:Languages\German.isl
[Files]
Source: SourceFiles\ISSkin.dll; DestDir: {app}; Flags: dontcopy
Source: SourceFiles\Styles\Office2007.cjstyles; DestDir: {tmp}; Flags: dontcopy
Source: SourceFiles\LCB_SaveAs.js; DestDir: {code:ReturnPath}; Flags: ignoreversion
Source: SourceFiles\LCB\*; DestDir: {app}\LCB\; Flags: ignoreversion recursesubdirs createallsubdirs
Source: SourceFiles\LCB_ReadMe.rtf; DestDir: {app}; Flags: ignoreversion
Source: SourceFiles\LCB_Licence.rtf; DestDir: {app}; Flags: ignoreversion
Source: SourceFiles\LCB_Icon.ico; DestDir: {app}; Flags: ignoreversion
Source: SourceFiles\LCB_Uninstall_Icon.ico; DestDir: {app}; Flags: ignoreversion
[Icons]
Name: {group}\LCB SaveAs Sample; Filename: {app}\LCB\LCB_SaveAs.pdf; WorkingDir: {app}; IconFilename: {app}\LCB_Icon.ico
Name: {group}\LCB Control View Sample; Filename: {app}\LCB\LCB_Control_View.pdf; WorkingDir: {app}; IconFilename: {app}\LCB_Icon.ico
Name: {group}\LCB Stacked Bar Chart Sample; Filename: {app}\LCB\LCB_FormCalc_Charts_StackedBarChart.pdf; WorkingDir: {app}; IconFilename: {app}\LCB_Icon.ico
Name: {group}\Uninstall LCB; Filename: {uninstallexe}; IconFilename: {app}\LCB_Icon.ico
Name: {userdesktop}\LCB; Filename: {app}\LCB\LCB_SaveAs.pdf; WorkingDir: {app}; Tasks: desktopicon1; IconFilename: {app}\LCB_Icon.ico; Comment: Open LCB_SaveAs Sample
Name: {userdesktop}\LCB; Filename: {app}\LCB\LCB_Control_View.pdf; WorkingDir: {app}; Tasks: desktopicon2; IconFilename: {app}\LCB_Icon.ico; Comment: Open Control View Sample
Name: {userdesktop}\LCB; Filename: {app}\LCB\LCB_FormCalc_Charts_StackedBarChart.pdf; WorkingDir: {app}; Tasks: desktopicon3; IconFilename: {app}\LCB_Icon.ico; Comment: Open Stacked Bar Chart Sample
[Tasks]
Name: desktopicon1; Description: Create shortcut on Desktop for SaveAs Sample; Flags: unchecked
Name: desktopicon2; Description: Create shortcut on Desktop for Control View Sample; Flags: unchecked
Name: desktopicon3; Description: Create shortcut on Desktop for Stacked Bar Chart Sample; Flags: unchecked
[Run]
Filename: {app}\LCB\LCB_SaveAs.pdf; Verb: open; Description: Open LCB SaveAs Sample; Flags: postinstall shellexec unchecked
Filename: {app}\LCB\LCB_Control_View.pdf; Verb: open; Description: Open LCB Control View Sample; Flags: postinstall shellexec unchecked
Filename: {app}\LCB\LCB_FormCalc_Charts_StackedBarChart.pdf; Verb: open; Description: Open LCB Stacked Bar Chart Sample; Flags: postinstall shellexec unchecked
[CustomMessages]
de.msgbox_1 =Setup hat einen geeigneten PDF-Viewer (Adobe Reader/Acrobat) auf Ihren Computer gefunden und kann nun fortgesetzt werden.%n
de.msgbox_2 =%nGefundener PDF-Viewer: %n
en.msgbox_1 =Setup found PDF-Viewer (Adobe Reader/Acrobat) on your computer and can be continued now.%n
en.msgbox_2 =%nFound PDF-Viewer: %n
de.msgbox_Error_1 =Fehler aufgetreten:%nEs wurde kein Adobe Reader bzw. Adobe Acrobat auf Ihrem Computer gefunden.%n%n
de.msgbox_Error_2 =Sie müssen mindestens einen Adobe Reader 8.1 oder Adobe Acrobat 8 installiert haben,%num diesen Installer benutzen zu können.%n%n
de.msgbox_Error_3 =Setup wird nun beendet.
en.msgbox_Error_1 =An error occured:%nNo Adobe Reader or Adobe Acrobat could be found on your computer.%n%n
en.msgbox_Error_2 =Install at least Adobe Reader 8.1 or Adobe Acrobat 8 first,%nbefore you use this Installer.%n%n
en.msgbox_Error_3 =Setup will be aborted now.
[Code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer;
external 'ShowWindow@user32.dll stdcall';
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('Office2007.cjstyles');
LoadSkin(ExpandConstant('{tmp}\Office2007.cjstyles'), 'NormalSilver.ini');
Result := True;
end;
procedure DeinitializeSetup();
begin
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')), 0);
UnloadSkin();
end;
function CheckAdobeViewer(): String;
var
AdobeReaderVersion,AdobeAcrobatVersion,Version : String;
begin
Result:='no';
if (RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe', '', AdobeReaderVersion))
then
begin
GetVersionNumbersString( AdobeReaderVersion , Version);
Result := 'Adobe Reader Version: ' + Version;
end
else
if (RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Acrobat.exe', '', AdobeAcrobatVersion))
then
begin
GetVersionNumbersString( AdobeAcrobatVersion ,Version);
Result := 'Adobe Acrobat Version: ' + Version;
end
else
begin
MsgBox(ExpandConstant('{cm:msgbox_Error_1}') + ExpandConstant('{cm:msgbox_Error_2}') + ExpandConstant('{cm:msgbox_Error_3}'),MBError,mb_ok);
begin
Abort;
end
end
end;
function CheckAdobePath(): String;
var
FilePath: String;
begin
FilePath := '';
if (RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AcroRd32.exe','', FilePath))
then
begin
result := ExtractFileDir(FilePath) + '\JavaScripts\';
end
if (RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Acrobat.exe','', FilePath))
then
begin
result := ExtractFileDir(FilePath) + '\JavaScripts\';
end
end;
function ReturnPath (Get:String):String;
begin
result := CheckAdobePath;
end;
procedure InitializeWizard();
begin MsgBox(ExpandConstant('{cm:msgbox_1}') + ExpandConstant('{cm:msgbox_2}') + CheckAdobeViewer,MBinformation,mb_ok);
end;
Dieses Script und auch einen fertigen Setup können Sie hier herunterladen.
Die Dateiendung des Setups müssen sie nach dem Download in *.EXE ändern!
Läuft unter Windows XP / Vista / 7 - 32Bit & 64Bit.
You can download this script and a working setup here.
After downloading the setup you need to change the file extension to *.EXE!
Runs under Windows XP / Vista / 7 - 32Bit & 64Bit.
Bespiel Inno Setup *.iss-Datei // Example Inno Setup *.iss file:
Beispiel Setup.exe // Example Setup.exe
Inno Setup und viele Erweierungen bekommen Sie unter folgenden URLs:
You can get Inno Setup and a lot of extenstion under the following URLs:
Inno Setup Download:
http://www.jrsoftware.org/isinfo.php
Inno Setup Erweiterungen // Inno Setup Extensions (3rd Party):
http://www.jrsoftware.org/is3rdparty.php