Start Menu Folder as a Subdirectory - Inno Setup - inno-setup

I want to add a shortcut to my program in the start menu as follows:
MyAppPublisher\MyAppName\MyAppName
I have this in my script:
DefaultGroupName={#MyAppPublisher}
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
But the start menu folder is always:
MyAppName\MyAppName
Any ideas?

It's as easy as specifying this path in the Name parameter of the entry in the [Icons] section. Your current script creates a shortcut like MyAppPublisher\MyAppName, this one will do what you need:
#define MyAppName "MyAppName"
#define MyAppExeName "MyProg.exe"
#define MyAppPublisher "MyAppPublisher"
[Setup]
AppName={#MyAppName}
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName={#MyAppPublisher}
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "{#MyAppExeName}"; DestDir: "{app}"
[Icons]
; notice the full path to the created shortcut, {group} is taken from the Select
; Start Menu Folder page edit box (if shown), which is by default taken from the
; DefaultGroupName directive value; this start menu folder path is then followed
; by the tail of the shortcut path
Name: "{group}\{#MyAppName}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

If you want the group to be in a subfolder, you need to specify the sub folder.
The best way to do this is to append it to the end of the DefaultGroupName directive which will show the correct info in the setup wizard and allow the user to change it to as single folder or another location entirely if they wish.
DefaultGroupName={#MyAppPublisher}\{#MyAppName}
Note that the Start Menu in Windows 8 is not heirachical so any nesting won't be seen anyway.

Found it, my script suggested in the question was correct, for some reason I needed to generate a new GUID for the script for the changes to take effect

Related

Shortcut to a folder on desktop in Inno Setup

I have made an exe file with Python and now I am trying to make an installer for it. I want to add a command in Inno Setup so after the installation it creates a shortcut to a folder in the installed directory (program folder/mixes). I want the shortcut to be on the desktop. I understand that you do it in the [Icons] sections but the examples I found were making a shortcut to an exe file but I want to make a shortcut to a folder. How do I do that? below is the Inno code:
#define MyAppName "Blender"
#define MyAppVersion "1.5"
#define MyAppExeName "Blender.exe"
[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={autopf}\Cybercrete
DisableProgramGroupPage=yes
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; \
GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Dirs]
Name: "{app}"; Permissions: users-full
[Files]
Source: "C:\CyberCrete\Ver 1.5\Output\Blender\{#MyAppExeName}"; DestDir: "{app}"; \
Flags: ignoreversion
...
[Icons]
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; \
Tasks: desktopicon
Name: "{commondesktop}\Setup"; Filename: "{app}\Setup.exe"; \
WorkingDir: "{pf}\Program"; IconFilename: "{app}\Setup.ico"
[Run]
Filename: "{app}\{#MyAppExeName}"; \
Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; \
Flags: nowait postinstall skipifsilent`
I read many forums but they are about making shortcuts to exe files not folders.
Creating a shortcut to a folder is the same as creating shortcut to a file. Just use the path to the folder as the shortcut target:
[Icons]
Name: "{autodesktop}\My Folder"; Filename: "{app}\My Documents"
Though indeed, you should not store user's documents into app installation folder. Use user's Documents folder or application data folder.
Granting users full permissions to the program's installation folder is an equally bad practice.
Seems like this link explains everything you should need to know about creating shortcuts.
My program makes PDF files as output in a folder called "mixes". I
want to make it easier for the users to access the folder, that's why
I want to make a shortcut to the result folder.
I would highly recommend not to make the output folder in a relative folder in the program files (i.e. in a folder that is located in a location that is based on where the program is installed). This is both not easily found and will often need Admin permissions to write to a folder stored there.
I would recommend placing the folder in Documents (assuming this is Windows) or in AppData, which would make the folder both more easily accessible and will not run into permission issues.

Configuring Visual & Installer in VS 2022 for x64

My config screen:
Why is it that I can't select x64 in the list? In the Alarm Clock row there is Add / Edit in the drop-down list. But not for AlarmClockSetup.
I am posting step by step tutorial because Configuration in Visual Studio works differently than in Inno Setup:
Lets assume user wants to build 2 installers: for 32 and 64 bit OS (two separate setup.exe-s).
Define 2 Visual Studio Configuration(s) for this using standard Visual Studio Configuration manager dialog, choose any names for them you wish, I chose: "setup32" and "setup64", the result will look like this:
For EACH configuration define some symbol (called conf in this example) in Project Properties like this: conf=$(Configuration)
It is important to have this symbol set for EACH configuration
And now double check whether you have defined this symbol for EACH configuration
If symbol is not defined for some Configuration you receive "Error on line XXX: Undeclared identifier: conf."
Inno script to test the configuration:
[Setup]
AppName=InnoSetupProject1
AppVersion=1.0
DefaultDirName={pf}\InnoSetupProject1
DefaultGroupName=InnoSetupProject1
UninstallDisplayIcon={app}\InnoSetupProject1.exe
Compression=lzma2
SolidCompression=yes
OutputDir=userdocs:Output
OutputBaseFilename=InnoSetupProject1
PrivilegesRequired=lowest
[Files]
Source: "Script.iss"; DestDir: "{app}"
[Icons]
Name: "{group}\InnoSetupProject1"; Filename: "{app}\InnoSetupProject1.exe"
[Code]
// Place your code here...
procedure InitializeWIzard();
begin
MsgBox(ExpandConstant('Configuration: {#conf}'), mbinformation,mb_ok);
#if conf == "setup32"
MsgBox('This is setup32', mbinformation,mb_ok);
#endif
#if conf == "setup64"
MsgBox('This is setup64', mbinformation,mb_ok);
#endif
end;
How it works:
When you choose "setup32" in Configuration dropdown, the $(Configuration) MSBuild variable is initialized and set to "setup32".
This $(Configuration) is mapped to Symbol conf (defined in Project Properties) that can be used anywhere in the script.
Use it for conditioning the setup behaviour using pre-processor #if, for Pascal code or anywhere as {#conf}.
So when the configuration is set to setup32 and you build the script, the Inno pre-processor excludes the inappropriate parts from the script and only the correct message box is shown.
Use the #if for include/exclude files in your script, for [Setup] section directives, for defining the Output directory or anything, choose the Configuration and rebuild the setup.

how to change the icon of the shortcut of accde in inno setup

Everyone I created a DB and after that, I compile it ACCDE and I use Inno setup for making installer of ACCDE file but I have a problem I want to change the Icon of the shortcut which is created by inno setup on the Desktop. Any idea how to perform this task. Thanks in advance.
Put down {commondesktop} as Name in the Icons section, if you want to make a shortcut on the Desktop Window. That's all.
Assume the name of your ACCDE is "example.accde".
See below.
#define MyAppName "Example"
#define MyAppFullVersion "0.1.0"
#define MyAccdeFileName "example.accde"
[Setup]
AppId={{2D9CC75F-E3DA-4E86-A659-03301DDE1C33}}
AppName={#MyAppName}
AppVerName={#MyAppName} {#'V'}{#MyAppFullVersion}
DefaultDirName={pf}\{#MyAppName}
[Files]
Source: "{#MyAccdeFileName}"; DestDir: "{app}"
[Icons]
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAccdeFileName}"; WorkingDir: "{app}"
Use IconFilename parameter of your [Icons] section entry:
[Icons]
Name: "{commondesktop}\My DB"; Filename: "{app}\db.accde"; IconFilename: "{app}\myicon.ico"

Can Inno Script contain 2 Groups?

How can i can a shortcut to a particular folder in Start Menu?
Suppose Main Folder\Sub Folder\My Application is the hierarchy group in my current Inno Script. How can i create a short cut directly under Main Folder without changing DefaultGroupName
DefaultGroupName=Main Folder\Sub Folder\My Application
I don't know what you want to say about 2 groups but if You want to create folder shortcut in start menu.You can do that by add the entry in start menu.If you want a special folder in start menu then you have to add the folder in [Setup] section with DefaultGroupName.You can also stop user from changing the folder by disabling program group page
(DisableProgramGroupPage=yes).
Look at the sample script,this will create a shortcut under Activision\Call of Duty 2 in startmenu.
#define MyAppName "Call of Duty 2"
#define MyAppVersion "1.3"
#define MyAppPublisher "Activision"
[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\Activision\Call of Duty 2
//
DefaultGroupName=Activision\Call of Duty 2
//here you can change the folder in startmenu
DisableProgramGroupPage=yes
OutputBaseFilename=Setup
UninstallDisplayName={#MyAppName}
UninstallDisplayIcon={app}\Icon.ico
[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
PS.I am using 'Call of Duty 2' example to make it more understandable.

Inno Setup is not including any of indicated files in destination folder

This is the first time I've used an installer program other than Access Developer Extensions. I have couple of MS Access files I'm trying to have installed into the user's AppData\Local folder. The only thing it will seem to do is put two files in that folder: unins000.exe and unins000.dat. It seems to ignore the files I want put in there, although when I compile it's definitely including them in the Setup.exe file. Here is the script - can someone tell me what could be wrong here? It doesn't seem to matter if the destination folder or files exist or not - I get the same result.
; -- LEAP.iss --
[Setup]
AppName=LEAP
AppVersion=1.1
DefaultDirName={localappdata}\LEAP
DefaultGroupName=LEAP
Compression=lzma2
SolidCompression=yes
OutputDir=userdocs:Inno Setup Output
[Files]
Source: "China.accdb"; DestDir: "{localappdata}"; DestName: "China.accdr"
Source: "Replica of China_be.mdb"; DestDir: "{localappdata}"
[Icons]
Name: "{group}\LEAP"; Filename: "{localappdata}\China.accdr"
Name: "{userdesktop}\LEAP"; Filename: "{localappdata}\China.accdr"
You want to replace {localappdata} with {app} in the [Files] and [Icons] sections. The {app} constant is defined once the user selects the install location on the "Select Destination Location" wizard page. Your end-users might not appreciate that you've allow them to choose a location to install your program, only to find out that you've actually hard-coded that location in the installer.
If you don't want them to choose a location, then set DisableDirPage=true in [Setup].
You should also establish an AppID value in [Setup].

Resources