Jump to content
Excelsior Forums

lion

Members
  • Content count

    0
  • Joined

  • Last visited

Everything posted by lion

  1. Post-install action can be used to move installed files into other folders. Unfortunately, moved files will be not automatically removed during uninstall phase. You should take care of removing such files yourself. We recommend to use Excelsior Delivery. It supports installation of application files to any number of folders in addition to the main installation root. Excelsior Delivery is free for non-commercial use. It has no time restrictions, supports full functionality of the commercial version. Excelsior Delivery and Excelsior Installer can use the same project files. Backward compatibility of project files is not supported. To create additional installation root, go to the page "FILES" and press the button "Create New Root" on the panel "PACKAGE FILES". Please refer to the page http://installer.excelsior-usa.com/doc/delivery/eit002.html#0016 for details.
  2. Add path

    Dear Johan, Sorry for our slow reaction time. Current version of our installers have not direct support of PATH variable manipulation. As a workaround, you can export your project into NSIS scripts and customize scripts. Please read the article "Path Manipulation" from NSIS web-site http://nsis.sourceforge.net/Path_Manipulation for details. Probably you will prefer to customize templates of NSIS scripts to avoid patching the generated scripts everytime. 1. Please visit http://nsis.sourceforge.net/Path_Manipulation and copy the content of section 6.3 "The Functions" into new file named "AddToPath.nsh". The content of the "AddToPath.nsh" file should begin with !ifndef _AddToPath_nsh !define _AddToPath_nsh and end with !endif ; _AddToPath_nsh 2. Copy created "AddToPath.nsh" file into "Excelsior Delivery 2.2\nsis" folder. 3. Open "Excelsior Delivery 2.2\nsis\eit.nsi" file and insert the line !include "AddToPath.nsh" just after the line !include "FileFunc.nsh" 4. To add location of installation folder to PATH environment variable at install time, find in the "eit.nsi" file the line: @POSTINSTALL_ACTION_RUN_ALWAYS and insert the following lines just before it: Push $INSTDIR Call AddToPath 5. To remove location of installation folder from PATH environment variable, find in the "eit.nsi" file the line: SectionEnd ; Uninstaller Section and insert the following lines just before it: Push $INSTDIR Call un.RemoveFromPath That's all. After all manipulations "eit.nsi" should looks like; ; ----------------------------------------------------------------------------- ; The installation script based on NSIS modern user interface ; ----------------------------------------------------------------------------- @PACKAGEINFO . . . !include "LogicLib.nsh" !include "FileFunc.nsh" !include "AddToPath.nsh" . . . ; ----------------------------------------------------------------------------- ; Installer Sections Section "Installer Section" . . . Push $INSTDIR Call AddToPath @POSTINSTALL_ACTION_RUN_ALWAYS . . . SectionEnd ; Installer Sections . . . ; ----------------------------------------------------------------------------- ; Uninstaller Section Section "un.Uninstaller Section" . . . Push $INSTDIR Call un.RemoveFromPath SectionEnd ; Uninstaller Section ; ----------------------------------------------------------------------------- ; Customization of uninstall NSIS callbacks Function un.onInit @DESIRED_LANGUAGE FunctionEnd You can find "AddToPath.nsh" and patched "eit.nsi" in the attachment of this post. To export your project, open it with Ecelsior Installer or Delivery and select File -> Export to NSIS in the main menu. As a alternative, you can try beta version of Excelsior Delivery. This version provides special API to request Excelsior Delivery to modify System registry and environment variables at install and uninstall time. This API is available via callback DLL. The beta version of Excelsior Delivery 2.3 is available to download by the following link http://www.excelsior.ru/downloads/eit-230-beta-en-win32.exe File "Excelsior Delivery 2.3\include\eit.h" defines the Excelsior Toolkit API. Sample "Excelsior Delivery 2.3\samples\ToolkitAPI" shows how to use Excelsior Installation Toolkit API to manipulate with PATH environment variable. With best regards, Kostya nsis-eit.zip
  3. font sytle

    Currently there is no way to change font's size and type of the installer wizard messages.
  4. Thank you very much for clarification. You are right, it is good idea to launch at uninstall time a exe- and bat- files as well as a DLL. We have added this feature in our list of requested features. By the way, we are working on the extension of callback DLL. New callback function will be provided to a callback DLL. Callback DLL can request Excelsior Delivery to modify System registry and environment variables using this new function. All such modifications will be automatically removed at uninstall time. For example, the following callback DLL insert the path to the "bin" subfolder of main installation folder into %PATH% environment variable. install.c #include "excelsiorInstallerAPI.h" #define XDS_BIN_DIR L"\\bin" ExcelsiorCallback eit; void __declspec(dllexport)__stdcall InitExcelsiorCallback (ExcelsiorCallback ecb) { eit = ecb; } int __declspec(dllexport)__stdcall PreInstall (char* installation_folder_name) { eiParamProperty_t instPath = {EIPROP_INSTALLPATH, NULL}; wchar_t *wcsPath; int wsize, status; wsize = eit(EICMD_PROPERTY_GET_SIZE, instPath.name, 0); if (wsize == 0) return 1; wsize += wcslen(XDS_BIN_DIR); wcsPath = (wchar_t*) malloc(wsize * sizeof(wchar_t)); instPath.value = wcsPath; wsize = eit(EICMD_PROPERTY_GET_VALUE, &instPath, wsize); if (wsize == 0) { free(wcsPath); return 1; } wcscat(wcsPath, XDS_BIN_DIR); status = eit(EICMD_ENVVAR_ADD_PATH, wcsPath, 0); free(wcsPath); return status; } excelsiorInstallerAPI.h typedef struct eiParamProperty_t { wchar_t * name; wchar_t * value; } eiParamProperty_t; typedef int (__stdcall * ExcelsiorCallback)(int uiCmd, void *pParam, unsigned long nParam); // // Returns length of the property value (in 'wchar_t'). // // pParam - 'wchar_t *' - property name (EIPROP_*) // nParam - 0 // Return - the required buffer size, in wchar_t, including the terminating null character or // - 0 if the property is not defined. // #define EICMD_PROPERTY_GET_SIZE 0x0001 // // Returns property value. // // pParam - 'eiParamProperty_t *': // - 'name' - property name (EIPROP_*) // - 'value' - buffer to receive value // nParam - size, in wchar_t, of the buffer 'pParam.value' // Return - the number of wchar_t written to the buffer including the terminating // null character or // - 0 if the property is not defined. #define EICMD_PROPERTY_GET_VALUE 0x0002 // // Add new path to PATH environment variable. // At uninstall time the first occurence of the given path will be removed // from PATH environment variable. // // pParam - 'wchar_t *' - path // nParam - 0 // Return - EIRES_OK or // - EIRES_ERROR if it does not succeed // #define EICMD_ENVVAR_ADD_PATH 0x0106 If you are interested in this feature I can give you a version of Excelsior Delivery with the draft of this feature. Your opinion will help us to make this feature better.
  5. It is nice to see that "Export to NSIS" has helped to solve the issue. To say the truth, I haven't understood the last question about "Run always" action. Would you please to give us more details. What version of Excelsior Installer/Delivery do you use? What issue do you want to solve using the "Run always" action? What happened? What were you expecting to happen? Thank you in advance.
  6. Sorry for the delay with the answer. Due to security reason, if the registry key existed before installation it won't be removed at uninstallation. It means that there is no "regular" way to clear registry if application has been installed without removing previous installation. Please take into account, that only registry key isn't removed. All registry values created at installation time will be removed at uninstallation. Currently there is no option to disable several installation of the same package. As a workaround you can export your project into NSIS scripts and adjust the handler of corresponding warning dialog. 1. Select "File -> Export to NSIS" in the main menu to create NSIS scripts. 2. Open the generated "*.nsi" file and find the string MessageBox MB_YESNO "$(MSG_PREV_INST_FOUND)" IDYES L_DoInstall 3. Replace this string by the following one MessageBox MB_OK|MB_ICONSTOP "$(MSG_PREV_INST_FOUND)" 4. In each "*_Lng*.nsh" file find a line containing "MSG_PREV_INST_FOUND" and remove the end of this line since "$\r$\n$\r$\n". Please keep a closing quotation mark. For example, the English message string: ${LangFileString} MSG_PREV_INST_FOUND "Previous installation of $(^Name) was found.$\r$\nIt is recommended to remove it before installing this version.$\r$\n$\r$\nDo you wish to continue without removing the previous installation?" Should be truncated to the ${LangFileString} MSG_PREV_INST_FOUND "Previous installation of $(^Name) was found.$\r$\nIt is recommended to remove it before installing this version." 5. Compile modified scripts by the NSIS compiler. May be it will be better to use Excelsior Delivery 2.2 and export your project to MSI. By default, generated Windows Installer setup package does not allow to install the same application twice. 1. Select "File -> Export to WiX" in the main menu to create WiX source code and produce Windows Installer setup package.
  7. This feature is not supported yet. The end-user cannot skip installation of some files of the setup package.
  8. Excelsior Installer\Delivery uses the default temporary-file directory. In your case file could not be created in the default temporary directory. The default temporary-file directory is specified by the system property java.io.tmpdir. On Microsoft Windows systems it is typically "C:\\WINNT\\TEMP". May be you have not access right to the default temporary-file directory. To check it, please launch Excelsior Delivery with administrative privileges and reproduce this issue. Right click on Excelsior delivery shortcut and select "Run as administrator". May be the default temporary-file directory is absent. To ensure that this directory exists, please execute the following command: mkdir %TEMP% If the default temporary-file directory exists, you see the following message: "A subdirectory or file <directory_name> already exists." You can change the value of the system property java.io.tmpdir for Excelsior Installer\Delivery. To do it, please launch Excelsior Delivery (or Installer) via the following eit_launcher.bat: @echo off set jetvmprop=-Djava.io.tmpdir=path_to_temporary_directory "C:\Program Files\Excelsior Delivery 2.1\Packager.exe" %*
  9. This issue is resolved in Excelsior Delivery 2.2 beta.
  10. Thank you very much for your report! We feel so sorry for the inconvenience caused. We cannot reproduce the issue on our side unfortunately. Would you please kindly tell us more details about your primary and update packages. Please, check your email for detailed instructions. The letter's title is 'Re: Excelsior Installer "Update won't... update"'. Thank you in advance, Konstantin Excelsior Support Team
  11. To attach a digital signature to your installation package: 1. Create installation package without internal MD5 signature. 1.1 Run "Packager" and open existing or create a new project. 1.2 Go to the tab "Install" on page "Settings", and uncheck the check box "Verify package integrity before installation". 1.3 Rebuild installation package. 2. Get a Certificate file from any site support certificate (http://www.verisign.com/, http://www.thawte.com/, ...) or generate test certificate file. Generate test certificate files: 2.1 Run "makecert" and enter a password to create a test certificate file: makecert -ss Root -sv Test.pvk NewCer.cer This command creates two files: "NewCer.cer" - certificate file "Test.pvk" - private key container See http://msdn.microsoft.com/en-us/library/bfsktky3.aspx for details. 2.2 Run "cert2spc" to create test Software Publisher's Certificate (SPC): cert2spc.exe NewCer.cer NewCer.spc This command creates file "NewCer.spc". See http://msdn.microsoft.com/en-us/library/aa376008(v=VS.85).aspx for details. 3. Attach a digital signature to your installation package. Launch the signing wizard: signtool.exe signwizard 3.1 On page "File Selection", select your installation package. 3.2 On page "Signing Options", select type "Custom". 3.3 On page "Signature Certificate", press "Select from File..." button and select file "NewCer.spc". 3.4 On page "Private Key", select file "Test.pvk". The password will be prompted. 3.5 On the next pages of the Digital Signature Wizard select options as you wish. makecert.exe, Cert2Spc.exe and signtool.exe are available as part of the Windows SDK, which you can download from http://go.microsoft.com/fwlink/?linkid=84091.
  12. Since Excelsior Installer/Delivery version 2.0 it is made possible to locate the default installation folder(s) of your application in any of standard Windows locations, like Desktop, Application Data, My Documents etc. In addition, Excelsior Delivery allows to you to install application files to any number of folders in addition to the main installation root.
  13. small bugs

    Both issues are fixed in version 1.8 and later
  14. Since version 2.0 it is made possible to locate the default installation folder(s) of your application in any of standard Windows locations, like Desktop, Application Data, My Documents etc. The rich set of predefined locations makes unnecessary the usage of environment variables.
  15. This issue has been fixed in version 1.8
  16. I apologize for long silence. Excelsior Delivery currently supports icons in ICO (Windows Icon) file format. There is not special restriction on icon size. Excelsior Delivery has been successfully tested on icon file (128x128). Would you please provide us with your custom icon file? Can you open your icon file in the other application, for example, Microsoft Paint? Thank you in advance, Kostya
  17. Michael, I'm sorry for unexpected delay! We need more details to reproduce this problem on our side. Please, check your email for our questions. Thank you in advance, Kostya
  18. Excelsior Installer and Delivery create updates using the file replacement mechanism. Of course, the binary delta technique is more preferable for updates. It is one of the priority features that should be done in our installers.
  19. Most probable reason is that the installer checks the package itself against MD5 hash. When you sign it, you change it for sure. Try to uncheck the "Verify package integrity before installation" that is located on the "Install Facilities" tab, page "Settings", it should help. Let us know if not.
  20. Did you try to remove the uninstall shortcut either? If no, try it. To recreate it just select "Uninstall.exe" from the installation folder. This is a tricky way, but sometimes may help. Actually we don't know a reliable way to controll the sort order which the Explorer will use for shortcuts and so we don't have any means in the Packager for it. At least, if your user ask the Explorer to sort shortcuts by name then it will happen so even if you install your package after it. If you know any way to handle it, we'd be glad if you share it with us . We'll continue thinking about too. No, it is not an intended behaviour. Actually we didn't think about it at all. Yes it looks as a misbehaviour, so I'm putting it to our bagtracker. Thank you for interesting questions!
  21. Hello! The only way to make entire installation silent available for the moment is to run the installation package with "/batch" parameter of the command line. This mode hides all installation screen, including the license agreement. I'm afraid it is not what you really need, sorry to say. There is no other ways to opt-out installation screens. I've put this feature to our todolist, hope we'll have it in the future. Thanks for the good idea.
  22. Excelsior Installer and Delivery always overwrite all package files during installation. There is no trivial way to disable such behavior for some files. As the workaround you can use Install Callback DLL. Your own callback DLL will be invoked once just before copying files and once after the copying process is finished. So you can save config file before installation and restore it after installation. But this way requires a bit of programming. The other way is to include "default" config in package and rename it to "application" config during installation. For example, an application uses "app.cfg" file. We create "default.cfg" and include it in the installation package. We also include the special batch file "setup.bat" in the package: @echo off if not exist app.cfg rename default.cfg app.cfg This batch file should be selected as "Run always" post-install action within the Packager. "Run always" action is started just after copying application files to the destination location. If "app.cfg" will exist then nothing will be done. Otherwise "default.cfg" will be renamed into "app.cfg". In this case to remove "app.cfg" during uninstallation you should use the feature "Remove all files from installation folder(s) upon uninstall". Best regards
  23. In the version 1.8 the uninstall Callback DLL is a single way to add extra functionality to the uninstallation process. Your own callback DLL will be invoked once just before uninstallation is started, so it can perform custom uninstallation actions. A uninstall callback DLL must be added to the package files and may have any name. There is no restriction to the place inside package where a uninstall сallback DLL is located. The uninstall callback DLL should export the function: int __stdcall PreUninstall (void) Return value of the functions is a return code. If they return a non-zero value, the uninstallation process will be terminated and a dialog displaying the respective message and the return code, will appear. Note: when building the DLL, enable the static linking mode so that they do not depend on any other DLLs except those implementing the system API. Excelsior Delivery includes a sample named "InstallCustomization". This sample shows how to use installation and uninstallation callback DLLs. It is a good idea to support pre-uninstall actions like the post-install actions, say, "Run always". In one of the next versions we will do it.
  24. This feature are available in Excelsior Delivery and named "File associations". You may set up your application as a handler of certain file type in your user's Windows using special Packager options. If a file association was specified, the installer will display a dialog that shows the file name extensions and description of the associated programs allowing your user to enable/disable some of the associations. The screenshot of File Associations dialog: http://installer.excelsior-usa.com/images/delivery/scr-2step-a.jpg
  25. Dear Ted, Thank you for your suggestion. It will be added into the features list for the future releases! If you need that action right now, you can use Excelsior Delivery. It extends installation scenario with your own callback DLL that will be called before installation. http://installer.excelsior-usa.com/delivery/en/features.html Best regards, Konstantin, Excelsior Installer Team PS: Evaluation version of Excelsior Delivery supports full functionality except branding of installation dialogs and may be used for non-commercial products for free. Excelsior Delivery 1.7: Callback DLLs The install callback DLL should export the two functions: int __stdcall PreInstall (char* installation_folder_name) int __stdcall PostInstall (char* installation_folder_name) where the installation_folder_name parameter is the absolute pathname of the installation directory. The uninstall callback DLL should export the function int __stdcall PreUninstall (void) Return value of the functions is a return code. If they return a non-zero value, the (un)installation process will be terminated and a dialog displaying the respective message and the return code, will appear. The installer/uninstaller invokes the functions in the order described in sections Installer and Uninstaller. Though the declarations are given in the notation of the C language, you can create the DLLs using another programming language provided that it has equivalent types and its implementation supports the __stdcall calling convention. Note: when building the DLLs, enable the static linking mode so that they do not depend on any other DLLs except those implementing the system API.
×