Inno Setup copy OutputBaseFileName in PostCompile section - inno-setup

I want copy OutputBaseFileName to archive after Inno Setup Studio script compiling is finished.
I prepared this script but it doesn't work.
[PostCompile]
Name: CopyFile({#OutputBaseFilename}, '\\Bckserver\Source\'{#OutputBaseFilename});

I will guess that you want to have the compiler copy the generated installer to yet another directory (\\Bckserver\Source).
This works:
Name: "C:\Windows\System32\cmd.exe"; Parameters: "/c copy C:\path\setup.exe \\Bckserver\Source"
I do not think there's better solution, as Inno Setup Studio does not support preprocessor in the PostCompile section, so you cannot refer to OutputBaseFilename or system directory other than by hard-coding them.

Related

Creating Zip File in Inno Setup Script

Suppose I want to put a zip file in the installation path after installation. But this zip file is not available to me, so it has to be created in the build process.
And a folder must be added to another folder and the zip file must be created from it.
For example I have:
C:Folder1
C:Folder2
And zip file must be:
C:Folder1/Folder2
With all the files in respective folder.
I have unfortunately very little experience with Inno-Setup and this particular problem with the folder in another folder pack without changing the source path but a zip file in .exe to do I find nowhere.
Inno Setup cannot create a zip file for you while compiling.
But you have two options how to delegate the zip creation to an external process
If you are automating complex build process, you will likely be running Inno Setup command-line iscc compiler. So just before running it in your batch build process, run another process/software/tool to create the zip file.
For some example, see:
Inno Setup Pre- / Post- compile action
If you really want to create the zip file on the fly, while manually building the installer in Inno Setup GUI, you can use preprocessor Exec function to start an process/software/tool to create the zip file before the actual compiling begins.
For some examples, see:
Inno Setup Pre- / Post- compile action
Create files in Inno Setup setup needed by the [Files] section
Is it possible to call a batch file while compiling an Inno Setup script?
As for the actual zip file creation, that's not really Inno Setup question anymore. You will file lot of question about that, for example:
Batch file script to zip files

Download files from fileshare [duplicate]

Is it possible to create the Inno Setup script to copy files from a UNC path on the network rather than statically adding them to the setup file?
If so, can it still be done if I need to authenticate to the path first? Is there a mechanism to provide authentication info in the Inno Setup script?
Essentially, I am wanting setup to just copy files from various sources over the intranet from a UNC path to put into the setup destination directory.
Yes, specify the UNC path in the Source parameter of the [Files] section entry and use the external flag.
[Files]
Source: \\UNC\path\file.txt; DestDir: {app}; Flags: external
To authenticate, you would have to call the WNetUseConnection or similar WinAPI.
See How to execute "net use" command from Inno Setup installer on Windows 7?

Inno Setup - Post Processing

I would like to build an MD5 checksum file of the setup file generated by Inno Setup. I've found the pre-processor and was wondering if there is a way to do some processing once the 'setup' output file has been created.
It needs to run at the compile time not during installation.
If you are automating your build, just use command-line compiler from a batch file (or any other script).
And as a next step, run a tool to calculate the checksum.
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Example1.iss
certutil -hashFile mysetup.exe MD5
Alternatively, use Inno Script Studio (clone of Inno Setup).
It has [PostCompile] section. In its GUI, it's "Post Compilation Steps".

InnoSetup - Erroneous "File in use by another process..." message while compiling

Although I really like InnoSetup, I have been suffering with this erroneous message for some time, but my frustration has reached new heights. There are numerous posts complaining about this problem, which is most certainly an InnoSetup bug, but no useful work-arounds that I can find.
I have a very simple (signed) setup that merely copies some files and creates a shortcut. It does not even include an executable. When I try to compile the setup, I am getting this "the process cannot access the file because it is being used by another process" message - repeatedly (normally I always get the setup to compile within 3 tries), but now it seems futile after many. many tries. The file that is "in-use" is not clear from the InnoSetup output or error dialog. There are most definitely no competing processes running. (I have rebooted the machine and still get this message).
Any ideas on how to resolve this are much appreciated.
Here is the complete setup code - it is signed, but that is not a problem with other setups I have created with the same signature.
#define MyAppName "Easy-IAP for IronKey"
#define MyAppVersion "4.0"
#define MyAppPublisher "Command Post Solutions"
#define MyAppURL "http://www.commandpostsolutions.com/"
[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={{51668D56-27F6-4C83-87F2-677328EFE808}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName="\EZ-IAP"
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=IronKeySetup
SetupIconFile=C:\Users\ron\Dropbox\EZIAP\eziap.ico
Compression=lzma
SolidCompression=yes
SignedUninstaller=yes
SignTool=Standard /d $qEasy-IAP Installer$q $f
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Files]
Source: "C:\Users\ron\Dropbox\Easy-IAP for IronKey\AccessDatabaseEngine.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "C:\Users\ron\Dropbox\Easy-IAP for IronKey\dotNetFx40_Full_x86_x64.exe"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "C:\Users\ron\Dropbox\Easy-IAP for IronKey\Easy-IAP for IronKey\bin\Release\Easy-IAP for IronKey.exe"; DestDir: "{app}";
; NOTE: Don't use "Flags: ignoreversion" on any shared system les
[ICONS]
Name: "{drive:{app}}\Easy-IAP"; Filename: "{app}\Easy-IAP for IronKey.exe";
I had the same problem.
It was due to McAfee antivirus running the realtime scanning on the exe file being compiled...
As it doesn't seem possible to exclude a directory from realtime scanning, I shut it down in McAfee SecurityCenter, and now it's good.
Hope this help
The problem is often an explorer window being open viewing the folder where the output files will reside.
Explorer continually opens the executable as it is built trying to fetch its icon and other metadata. Close any open explorer windows which are viewing the output folder and try again.
For this reason you are best running your inno setup file from the command line or part of a visual studio or other automated build process.
This is not a bug, this is only bad design of application (or bad documentation) :)
Use the OutputDir directive in your [Setup] section to avoid this wrong behaviour.
OutputDir=c:\output
OutputDir specifies the "output" directory for the script, which is where the Setup Compiler will place the resulting SETUP.* files. By default, it creates a directory named Output under the directory containing the script for this.
You ask why?
If you do not use OutputDir in your script file (and many people do not use it) Inno Setup tries to create resulting setup in the "userdocs:" folder which causes a lot of troubles on all Windows systems.
Always use this parameter, even if you want to have resulting setup in current folder, in that case use:
OutputDir=output
I have OutputDir = x:]setup but the error still occurs. If I reboot my machine and then build as the 1st task then the build works.
Win 7 Pro/64, InnoSetup 5.5.5(a): I had axactly the same InnoSetup compilling problems. After changing folders properties used in projects and output by revoking sharing them all works fine. Conclusion - it is better not to use InnoSetup within shared folders.
I had this when OutputDir="." (meaning, put the output in the same directory as the source files). It would fail every second build.
I fixed it by adding modifying my powershell build script to delete that entire output directory, then build my app (which auto-created that directory), then run iscc to create the setup.exe
The error could be caused because you are trying to copy a folder that is linked with a Windows Service.
To solve this problem, use a [Code] section instead of putting the folder in [Files]. That allows you to check if the folder exist, close the associated windows service and finally copy the folder.
I had the same problem with that the solution is already stated above
and the other reason with this error comes up when the output file of the .exe you compiling has already have the same name in the directory where you put the output directory from inno setup.
In order words when compiling you need some special character like '-' or '_' in creating the file name and to avoid this error message.
I tried various folders on my work machine and nothing resolved the issue. I finally had success by using:
OutputDir=C:\Users\userid\Downloads
(Replace "userid" with your particular account)
I tried all advices from above. I could not make it.
Then I switched back from version 6.2 to 6.0.2 and it fixed the problem.

Uninstalling files not originally installed by INNO setup

I use Inno Setup for my product's installer/uninstaller. My software has auto-update capabilities during which time it may not only change existing binaries but may also add new ones. These are additional product files that are placed into the product's installation directory - not data files.
The Inno Setup uninstaller only knows to uninstall files by name that it originally put there at install time. Since an automatic update doesn't change either the unins000.exe or unins000.dat files that make up the uninstaller, what would be the appropriate way to delete these new product files at uninstall time?
The easiest way I see is to have a batch file in your program dir that deletes all files that were added after the installation and is executed on uninstall:
[UninstallRun]
Filename: cleanup.cmd; WorkingDir: {app}; Flags: shellexec runminimized
UninstallRun commands are executed as the first step of the uninstallation, so this should work fine. If you are bothered by the idea of running a batch script, you can easily create your own cleanup.exe that deletes the files.
When you perform the auto update, you must also update the cleanup file, so that it includes all files that were added with the current update.

Resources