1 d
Inno setup code example?
Follow
11
Inno setup code example?
The problem is when I run the script and choose to install or Sherlock or Toby types I see that Watson is also installed. Support for adding custom wizard pages to Setup at run-time. Exceptions do not have any code in general. You signed in with another tab or window. iss -- ; ; This script shows how the PrepareToInstall event function can be used to ; install prerequisites and handle any reboots in between, while remembering ; user selections across reboots. The first syntax ("variable-definition") defines a variable named ident, or assigns a value to an element of an array named ident (use dim instead of define to define the array variable itself). Inno Setup has 'Ready to Install' page exactly for this purpose. In one of the handlers, I would like to be able to retrieve the value of the AppName (or, potentially, the value of other parameters) defined in the [Setup] section. Patel reiterated an Outperform rating on the shares of Nike, Inc. We compile all of Inno Setup's projects under Delphi 11 Cannot retrieve latest commit at this timeiss -- ; ; This script shows various things you can achieve using a [Code] section. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability. if Exec(ExpandConstant('{win} otepad. The if, elif, else, and endif conditional directives control in- and exclusion of portions of script. Seek was broken in Inno Setup 6 The bug was fixed in 62. I would like this behavior to be the default when the executable is run without parameters. In today’s digital age, where entertainment options are abundant, having a clutter-free and efficient entertainment setup is essential. Settings\TJ Hanson\Desktop\Inno Setup Data. That file contains an URL inside, that URL looks like this: "updateeu", or this "updatecom", or "updatekr" but can be also "updatekr/" and so on, there is a few possibilities. Support for scripted constants that can do anything the normal constants, the read-from-registry, read-from-ini and read-from-commandline constants can do + more. The TStream. bat', '', SW_HIDE, ewWaitUntilTerminated, ResCode) then { Program Ran successfully ResCode now contains exit code results } { if Exit was 10 then Cancel Installation. Problem is that I always get the ResultCode of 267 and myapplication has never exited. iss example scripts in the "Examples" subdirectory in your Inno Setup directory. If this is yes or to a boolean expression evaluating to True the uninstaller is included. ResCode : Integer; if Exec(ExpandConstant('{tmp}') + '\test. The [Code] section is an optional section that specifies a Pascal script Script generated by the Inno Setup Script Wizard. Inno Setup Run code according to setup type Are you looking for a code example or an answer to a question «inno setup start windows service»? Examples from various sources (github,stackoverflow, and others) Programming languages. How can I pass a variable from [Code] section to parameters in [Run] section in Inno Setup?. iss" file in the "Examples" subdirectory in your Inno Setup directory for an example script using IDispatch based COM Automation objects If you copy the interface definition from any existing Delphi source code, remove the brackets around the interface GUID string. [Setup] AppName=My Program AppVersion=1. Full source code is available (Borland Delphi 20 and 2009). Pascal Scripting: ShellExec. Click on file, then Save to save the file. The Wait parameter specifies whether the function should return immediately or wait. Result := True; if not PrerequisitesTest then I would need Inno Setup generated installer to delete certain files prior installation if the software is already installed with an older version. Inno Setup is copyrighted software, not public domain. 9. if CurStep=ssPostInstall then beginexe', ExpandConstant('{app}\Test. I've found some script examples for how to detect the version and install if correct and adapted them to my needs but I keep running into this: Unable to open file "path\to\JREInstall. That variable you can expand in your script as an ordinary define. And anyway, the /SILENT should always be accompanied with /LOADINF or at least /COMPONENTS or /TYPE. edited Nov 22, 2022 at 20:20. entries based on custom conditions. The following script can be used with Inno Setup to create an installer for your 32-bit Windows desktop apps another application's registry key. I'm using Inno Setup with InnoTools Downloader and after the download completed I want to copy the downloaded file to the selected directory. function InitializeSetup(): Boolean; begin. Are you tired of juggling multiple remote controls just to watch your favorite TV shows? Do you find yourself constantly searching for the right codes to program your universal rem. How to use a Pascal variable in Inno Setup? 2. The [Code] section is only for run/install time code so will work for the target path. This file can be prepared using the '/SAVEINF=' command as explained below. The icons are contained in a folder. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". Buttons specifies which buttons to include in the message box. Use Case: Basically, we have moved to using NuGet packages for our internal development projects. I am creating an installer through Inno Setup. HKxx specifies the root key; see the section documentation for a list of possible root keys. Like AlwaysRestart but per task. A size of for example 120 means a 20% size increase. History 118 lines (96 loc) · 3 ; -- CodePrepareToInstall. Step 3: Click on Add and Assign a name, such as “ sha256 ” or “ MS Sign “. Third-Party Files Here you can find various useful tools for Inno Setup (for example, GUI script editors) and translations of the. This package was approved as a trusted package on 12 Jul 2024 And write that entry value as string. Creating your own setup with a personalized payload is now straightforward. You signed out in another tab or window. Lots of support functions to do from the Pascal script just about everything Inno Setup itself does/can do + more. Create installer automatically with IDE scripting. If this directive is set to modern, Setup and Uninstall will show a more modern look and also the defaults for WizardResizable and WizardSizePercent change to respectively yes and 120,120 Use Anchors and KeepSizeY properties to add full support for WizardResizable and WizardSizePercent to all your custom controls and wizard pages if you have any. See the CodeClasses. Currently running dotnet --version or dotnet --info is probably the simplest waynet core can be installed anywhere (Mac, Linux, Windows) they decided to stick with CLI. A Pascal script can be used to customize Setup or Uninstall in many ways. Buttons specifies which buttons to include in the message box. The installer has the ability to compare file version info, replace in-use files, use shared file counting, register DLL/OCX's and type libraries, and install fonts. ここで【Create a new script file using the Script Wizard】 【Inno Setup Script Wizard】が表示されるので. Once the contents are copied over I then right-click the Inno folder and select 'Add existing items' to add them to the project: Step 4: Add the setup (* Right click the 'Installer' project and select 'Add. I am trying to configure Inno setup for my software (this is a C# software). windows malware shellcode inno inno. The Abort function will allow the setup to exit. Using Inno Setup constants. Professional lighting for photo studios can cost a pretty penny, but if you’re just starting out, you don’t have to drop that much cash (if you even have it to start with) Having multiple displays is a great productivity boost when you’re streaming, editing, or trying to distract yourself with a show in the background while grinding away in your favo. Note: If you use a Sign Tool and your Setup contains a large amount of data, it is recommended that you enable Disk spanning with DiskSliceSize set to max. The values for the Is64BitInstallMode and IsAdminInstallMode parameters can be passed to the function in the Inno Setup [Code] section by casting the Inno Setup functions of the same names to the DWORD type. Result := '{#MYVAR}' = '1'; Run the. 9. Returns True if successful. bannerlord marry anyone If UsePreviousAppDir is yes (the default) and Setup finds a previous version of the same application is already installed, it will substitute the default directory name with the directory selected previously. InnoSetup Windows Installer Engine. The same is true if Setup is launched from an already-elevated process. And of course, you need Unicode version of Inno Setup (the only version as of Inno Setup 6). The problem is when I run the script and choose to install or Sherlock or Toby types I see that Watson is also installed. The following is a list of the supported parameters: Name (Required) INNO setup check if folder exists Prototype: function DirExists(const Name: String): Boolean; Description: Returns True if the specified directory name exists. 1 and newer has a built-in support for HTTP/HTTPS downloads. Offsetting transacti. MEBANE, N, Jan. Support Inno Setup: Unicode Inno Setup: Non Administrative Install Mode: 64-bit Install Mode: 64-bit Installation Limitations: Architecture Identifiers: Wizard Pages: Installation Order: Unsafe Files: Compiler Command Line Execution: Setup Command Line Parameters: Uninstaller Command Line Parameters: Setup Exit Codes: Uninstaller Exit Codes. A BeforeInstall parameter function is executed once right before an entry is processed (and only if it's processed, which in your case is when the component is selected). This file can be prepared using the '/SAVEINF=' command as explained below. And it automatically pumps messages whenever you change the progress label/value to ensure that the user sees the correct status. The if, elif, else, and endif conditional directives control in- and exclusion of portions of script. 1, build 7055Windows 7 32 bit platformWindows 7 64 bit platformWindows 10, 64 bit platformA Sample Inno Setup ". So much has changed about the way people make calls. Here's the way I would code @az01 's example. Many people use more than one email account. GetEnvironmentVariable doesnt work in Inno Setup (Delphi) 2. So it never continues. Installation of files: Includes integrated support for "deflate", bzip2, and 7-Zip LZMA/LZMA2 file compression. [Setup] AppName=My Program AppVersion=1. HKxx specifies the root key; see the section documentation for a list of possible root keys. A chip or QR code… Contactless payment technology all. what time does supercuts open Use TEdit as a variable? 0. Have a look at the section "Pascal Scripting: Uninstall Code" in the Inno Setup Documentation. exe'), False); It don't do anything, but if I restart the installer and I install again to the same folder, then it. DefaultDirName={pf}\My Program. The setup program needs to call the exec function and make sure myapplication. If this is yes or to a boolean expression evaluating to True the uninstaller is included. I would give a try to something like this. Inserting this code for a custom script should do what you want: // Indicates whether the specified version and service pack of the. Inno Setup is a free installer for Windows programs. exe", Major, Minor, Rev, Build) Icons were created using the Mask-R-Aid program. Je ne m'attarderai pas sur la syntaxe de ce langage ni sur la partie script standard de InnoSetup (cf Nous ne traiterons pas non plus dans ce tutoriel, de l'extension InnoSetup Préprocesseur, qui fera (plus tard. The [Code] section is an optional section that specifies a Pascal script. Your browser does not support frames. accident on 410 san antonio today Improve this question Inno Setup 'Could not call proc' when using 64-bit class library A good resource for learning Inno Setup basics is Miral's blog. A BeforeInstall parameter function is executed once right before an entry is processed (and only if it's processed, which in your case is when the component is selected). exe on the extracted DLL) This is a lot to do just to "GetDiskDriveInformation" as the very first step of the install. EXE for each language. [Run] Filename: "someProgram. A 'type' of installation is a selection of components that it makes sense to install together. Here I'll give you example what I used and it worked for me: [Setup] AppName=MyApplicationName-O. Don't forget to use quotes if the filename contains spaces. This is the code strictly responsible for installing the JRE: You cannot place your code like this without any context. have placed on the Windows desktop. The extracted files are automatically deleted when Setup exits. Prototype: procedure ExtractTemporaryFile (const FileName: String); Description: Extracts the specified file from the [Files] section to a temporary directory. Use the {app} constant. DefaultDirName={pf}\Test. function CreateInputDirPage (const AfterID: Integer; const ACaption, ADescription, ASubCaption: String; AAppendDir: Boolean; ANewFolderName: String): TInputDirWizardPage; Creates a wizard page that contains edit boxes and Browse buttons for selecting directories. Donate Support the Inno Setup project. However I cannot combine that to some other examples I found on the net. The same is true if Setup is launched from an already-elevated process. Inno-Setup checking file location prior to installation, then using it during installation InnoSetup: Pascal script for cancelling setup when file/folder exists Description: Specifies the name of the bitmap file to display on the left side of the wizard in the Setup program. Instructs Setup to save installation settings to the specified file. ResCode : Integer; if Exec(ExpandConstant('{tmp}') + '\test. INNO Setup INSTALL EXAMPLES Silent INNO install with logging #IDENTIFICATION: Use 7-Zip to inspect the EXE. I'm using it for authorization process, if authorization is not successful, i want to notify the user I've added the example of the PascalScript code along with the commented version Commented Apr 10, 2012 at 12:15 If. Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly.
Post Opinion
Like
What Girls & Guys Said
Opinion
33Opinion
I am trying to find a way to register the dll during InitializeSetup in InnoSetup so. Inno Setup itself uses a Pascal Script based language, which is closest to Delphi, but it's limited in many ways. #define MyAppVersion "12. By this flag you can manipulate with files not contained in the setup package. A Pascal script can be used to customize Setup or Uninstall in many ways. TXT"; DestDir: "{app}"; Flags: isreadme. To get the version number string, call the function twice. 11. 0'); I've a question about the #define in Inno Setup. Returns True if successful, False otherwise. iss) using the script wizard, or open an existing You can use the Inno Setup. Marketing | How To REVIEWED BY: Elizabeth Kraus Elizabeth Kraus has more t. ) The main advantage of PrepareToInstall is that it allows you to handle errors and reboot requests from the child installer -- using AfterInstall doesn't. vfw dinner menu Although the Fed is independent of the government, it is ultimately a. But, as Miral suggests, the best is to look if there's a way to prevent the installer even create those shortcuts. 7570" #define MyAppName "MyApp Update" [Setup] AppId=MyApp AppName={#MyAppName} AppVersion={#MyAppVersion} DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1,InstallLocation} DisableDirPage=True [CustomMessages] MyAppOld=The Setup detected application version MyAppRequired=The. Returns an ID* constant indicating the button the user clicked, or 0 if the function fails (which shouldn't happen unless an invalid parameter is specified or system resources are exhausted). With this code you can run msi files without any problems. org It creates self-contained EXE packages. In the Unicode version of Inno Setup, the LoadStringsFromFile function (plural - do not confuse with singular LoadStringFromFile) uses the current Windows Ansi encoding by default. If this directive is set to modern, Setup and Uninstall will show a more modern look and also the defaults for WizardResizable and WizardSizePercent change to respectively yes and 120,120 Use Anchors and KeepSizeY properties to add full support for WizardResizable and WizardSizePercent to all your custom controls and wizard pages if you have any. See the CodeClasses. My setup script includes these two lines in the [Setup] section:. I want to learn to write custom code in Inno-Setup installers using the [code] section. exe and the users would not be able to change drive location. To give an example how to conditionally delete data files as part of the uninstallation process: [Code] procedure DeleteBitmaps(ADirName: string); EDIT: Also I tried this, but it doesnt work: SaveStringToFile('i:\Installer\Inno_Files\inno_log. The filename of a custom icon (located on the user's system) to be displayed. All examples you can find in documentation that helped me to sort things out. Describing the code would be nice, but this example helped me to get going more than the examples that ship with Inno Setup Commented Oct 27, 2018 at 6:19. 4. Lots of support functions to do from the Pascal script just about everything Inno Setup itself does/can do + more. food handlers test questions answers exe, Examples\MyProg-x64. But it's failing when I try to compile with the following error: Sign Tool failed with exit code 0x1. And it automatically pumps messages whenever you change the progress label/value to ensure that the user sees the correct status. Support Inno Setup: Unicode Inno Setup: Non Administrative Install Mode: 64-bit Install Mode: 64-bit Installation Limitations: Architecture Identifiers: Wizard Pages: Installation Order: Unsafe Files: Compiler Command Line Execution: Setup Command Line Parameters: Uninstaller Command Line Parameters: Setup Exit Codes: Uninstaller Exit Codes. If you want to remove the entire program group from the start menu, use the following: [InstallDelete] Type: filesandordirs; Name: "{group}" This assumes that your Inno Setup script Start menu folder name is the same as the previous "app1" application. Result := IsAdminInstallMode and (PageID = wpUserInfo); end; InnoSetup Windows Installer Engine. Note that you do not need to escape the closing brace of a constant as described above; that is only. If the filename is enclosed in quotes, ISPP first searches for the file in the directory where current file resides, then in the directory where the file that included current file resides, and so on. Since parameters of LoadStringFromFile as well as of StringChangeEx functions are declared, they expect the exact type to be passed, so there's not much to do with it. Encoding is UTF-8, UTF-16, UTF-32 etc. Reload to refresh your session. Due to limitations of Windows 95/98/Me's Add/Remove Programs Control Panel applet, the value of UninstallDisplayName will be trimmed if it exceeds 63 characters. 【InnoSetup】を起動すると【Welcome】ウィンドウが表示されるので. Both sections share an identical syntax, except where otherwise noted below. This optional section defines any registry keys/values you would like Setup to create, modify, or delete on the user's system. Jump to Eric Schmidt, the former CEO of Google, thinks that A. Note: If you use a Sign Tool and your Setup contains a large amount of data, it is recommended that you enable Disk spanning with DiskSliceSize set to max. These instructions have been tested with InnoSetup version 52(a). Signtool signs the file with certificate and checks the validity against. DefaultDirName={pf}\My Program. Install Mode: 32-bit vs 64-bit Installation Limitations. Miscellaneous Notes. The answer is in the Inno documentation. justaminx nufe You can define multiple #ifdef 's and set them via multiple /D 's. A comma is "%2c", a vertical bar is "%7c", and a closing brace is "%7d". A good way to create a unique name is to use reverse-DNS format, such as: commyapp. This way you can simulate an actual installation while running under. 1. The other parameters contain the (possibly empty) strings that Setup would have used as the setting sections. iss example scripts in the "Examples" subdirectory in your Inno Setup directory. Is there a way to achieve this using directives in the Setup section, preprocessor tricks or other clever methods? A very good point. 1, the GetVersionComponents) is a preprocessor function. Description: Lets you increase the default size of all Setup and Uninstall wizard windows without increasing the font size. function SaveStringToFile (const FileName: String; const S: AnsiString; const Append: Boolean): Boolean; Saves the specified string to the specified file. 'Select if you want to run File3. Example: #define MyDateTimeString GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':'); The help menu in ISTool (Also a part of the Quick Start Pack) has a good help file for ISPP. Click on the "create a new script file using the Script Wizard" option, and click Ok On the next window, leave the checkbox blank, and continue by clicking "next" From this page, choose the Download Inno Setup link to access the downloads page, and click the link to download the Inno Setup installer. Once the contents are copied over I then right-click the Inno folder and select ‘Add existing items’ to add them to the project: Step 4: Add the setup (* Right click the ‘Installer’ project and select ‘Add. 1. inno-setup; 32bit-64bit; Share. Using Inno Setup and want to show error/msgbox if one of the [Run] process does not return process code 0. exe"; DestDir: "{app}"; Flags: external Source: "{tmp}\ISCrypt. exe, Examples\MyProg-x64.
Nov 21, 2023 · Open up your installed Inno setup window, and begin following these steps: 1. See below: There is a lot of information how to create it. For those situations there is specific set of functions. Be sure to also download and install the Inno Setup QuickStart pack, as it contains two invaluable add-ons for Inno Setup, the ISTool script editor and the Inno Setup Preprocessor (ISPP). ico (when the desktopicon task is selected). lustgard But, as Miral suggests, the best is to look if there's a way to prevent the installer even create those shortcuts. answered Nov 18, 2011 at 9:47. The filename of a custom icon (located on the user's system) to be displayed. bat; Flags: runhidden; Alternatively, solution proposed by @Sertac Akyuz, which makes use of. Exceptions do not have any code in general. ico to the application folder (you may want to install the icon only when the desktopicon task is selected). - KngStr/Inno-All-in-One-Setup Inno Setup allows to set permissions only in sections [Files] [Dirs] and [Registry] and you'll have to use those somehow. 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. josclyn james That variable you can expand in your script as an ordinary define. First introduced in 1997, Inno Setup today rivals and even surpasses many commercial installers in feature set and stability Examples\MyProg. XBRL stands for Extensible Business Reporting Language. 1 Setup failed to initialize. Was the string also used in Pascal Script code (what is not, mentioning it just for benefit of others, who may find this question), you also have to use Inno Setup 50 or later. Yes it is. So if it is win 64 windows it is safe to read the HKLM64 otherwise the HKLM. 1. english movie hindi dubbed See below: There is a lot of information how to create it. To apply a [CustomMessages] section entry to only one language, prefix it with the language's internal name followed by a periodCreateDesktopIcon=Maak een snelkoppeling op het &bureaubladisl files for all languages that come with Inno Setup have the following custom messages defined and translated for each. An official settlement account is an. To print something to a debug output, use the Log procedure: Value: Integer; Value := 123; Log('The Value is: ' + IntToStr(Value)); Here is the result of the hovered Value variable from the previous script sample: And the result of the debug output window after when you step over the Log statement: That's helpful, thanks. I have created the following InnoSetup script for adding in optional components following advice from this StackOverflow answer: Inno Setup - Correct use of [Types], [Components] and [Tasks].
The icons are contained in a folder. If Append is True and the specified file already exists, it will be appended to instead of overwritten. If you provide the code for your GetSourceLibFolder function, someone can convert it to ISPP. password123 is password for your certificateexe is your setup file you want to sign. (Therefore, if AppId is "MyProgram", the key will be named "MyProgram_is1"3 versions of Inno Setup based the key name on the value of AppVerName. Ensure that your shellcode is encoded in a hex string, and then replace the Payload parameter with your payload. Settings\TJ Hanson\Desktop\Inno Setup Data. Having a few of such snippets, and including them in your scripts as necessary will probably be all you need: [Setup] AppID=DBUpdateTest AppVerName=Test 0 AppPublisher=My Company, Inc. The InitializeSetup function is called when the Inno Setup executable is run. This file must be located in your installation's source directory when running the Setup Compiler, unless a fully qualified pathname is specified or the pathname is prefixed by "compiler:", in which case it looks for the file in. Details on obtaining signing certificates and using code-signing tools are beyond the scope of this documentation. If you provide the code for your GetSourceLibFolder function, someone can convert it to ISPP. These can be useful to system administrators, and to other programs calling the uninstaller program. Pascal Scripting: Examples. exe) but also registers an OCX relying on the redist package. A collection of Inno scrpits, plugins, resources and so on. Support for scripted constants that can do anything the normal constants, the read-from-registry, read-from-ini and read-from-commandline constants can do + more. The TStream. The answer is in the Inno documentation. bird of paradise lowes And Inno Setup will try to execute it (hence the error). If Append is True and the specified file already exists, it will be appended to instead of overwritten. #define Major #define Minor #define Rev #define Build #expr GetVersionComponents("C:\path\MyProg. Popularity 3/10 Helpfulness 2/10 Language whatever Tags: exists inno-setup whatever. For instance, 'C:\MyPath'. edited Mar 18, 2010 at 1:11. 2. DefaultDirName="{code:GetPath}" The problem is that I need to define a default path, in case the function does not find a previous one. {reg:HKxx\\SubkeyName,ValueName|DefaultValue} Embeds a registry value. By default, registry keys and values created by Setup are not deleted at uninstall time. I would give a try to something like this. A BeforeInstall parameter function is executed once right before an entry is processed (and only if it's processed, which in your case is when the component is selected). Lots of support functions to do from the Pascal script just about everything Inno Setup itself does/can do + more. The letters with accents are the problem of. All redistributions of source code files must retain all copyright notices that are currently in place, and this list of. To uninstall Inno Setup, run the following command from the command line or from PowerShell: >. Replace the character with a "%" character, followed by its two-digit hex code. Jump to Eric Schmidt, the former CEO of Google, thinks that A. excitement coin qr codes In one of the handlers, I would like to be able to retrieve the value of the AppName (or, potentially, the value of other parameters) defined in the [Setup] section. It has been around 20 years since I last had to write in Pascal. exe) but also registers an OCX relying on the redist package. Use Case: Basically, we have moved to using NuGet packages for our internal development projects. The following variable simplifies the usage of Inno Setup in CMake: CPACK_INNOSETUP_USE_CMAKE_BOOL_FORMAT ¶. This can not be done. Putting all together might give you the following example script: [Setup] AppName=My Program5. In fact, most people use at least an email account for work and a personal email account. I named mine signtool because I'm using signtool Instructs Setup to load the settings from the specified file after having checked the command line. When specified, the uninstaller will not ask the user for startup confirmation or display a message stating that uninstall is complete. To do this, add an IDE Script step to your project and drag it after the "Build" item in the Windows build settings. Instructs Setup to ask the user to restart the system at the end of installation if this task is selected, regardless of whether it is necessary (for example because of [Files] section entries with the restartreplace flag). Setup uses this string to indent settings. exe": CreateProcess failed: Code 5: Access Is Denied. I plan to release many versions of my software, I would like to change the Inno setup installer interface if an older version of my application is already installed on the computer. Step 3: Click on Add and Assign a name, such as " sha256 " or " MS Sign ". This file can be prepared using the '/SAVEINF=' command as explained below. Returns True if successful. For example: [UninstallRun] Filename: {app}\Scripts\DeleteWindowsService. The problem is the same when trying to use managed DLLs from C++ for example. Create(MainForm); Type: files; Name: "{group}\uninstall app1". This optional section defines any shortcuts Setup is to create in the Start Menu and/or other locations, such as the desktop.