Jump to content
Excelsior Forums


  • Content count

  • Joined

  • Last visited

Everything posted by lion

  1. Hi Dave, First of all, you should replace "path_to_Mylib.sym" by the real path to the folder with "Mylib.sym" file. For example: xc Test.mod -lookup=*.sym=.;.\sym In any case try to run compiler in the make mode (check dependencies and recompile). xc =m Test.mod See section 4.2 "XDS compilers operation modes" in User's Guide for more details. With best regards, Konstantin
  2. Hi Dave, File "Mylib.sym" is produced when "Mylib.def" is compiled. Please make sure that "Mylib.sym" has been created. Sym-files of all imported modules must be available for compiler via "xc.red" file or "lookup" equation. Try to use the following command line to compile "Test.mod" xc Test.mod -lookup=*.sym=.;path_to_Mylib.sym See section 3.5 "XDS search paths" in User's Guide for more details. With best regards, Konstantin
  3. Hi Dave, Please turn on "M2EXTENSIONS" option to solve the problem with type compatibility. <* +M2EXTENSIONS *> MODULE MyModule; in the command line xc MyModule.mod +m2extensions or in the xc.cfg file. M2EXTENSIONS - enable Modula-2 extensions If the option is set ON, the compiler allows XDS Modula-2 language extensions, such as line comment ("--"), read-only parameters, etc., to be used in the source code. As an alternative you can use type cast MenuProc := SYSTEM.CAST(PROC, NIL); As regards to the second problem, I should see the prototype of "Pos" function to give an advice. With best regards, Konstantin
  4. lion

    Why Error E008

    Hi Dave, May be you will be interested in the Eclipse-based Modula-2 IDE for XDS developers. It provides coding assistance for XDS Modula-2 on the Windows platform such as code completion, formatting and navigation (show usages / jump to definition). It is open source project. You can download binaries and source code from GitHub https://github.com/excelsior-oss/xds-ide/releases/tag/xds-ide-1.7.0 With best regards, Konstantin
  5. lion

    Why Error E008

    Hi, it is recommended to turn on the "TOPSPEED" option on global level. Please place "-toopspeed+" into your command line or project file and remove this option from definition module. Other option to use ISO pragma syntax to turn on the "TOPSPEED" option inside definition module. In your example it will <* +TOPSPEED *> DEFINITION MODULE Menus; With best regards, Konstantin
  6. 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.
  7. lion

    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
  8. lion

    font sytle

    Currently there is no way to change font's size and type of the installer wizard messages.
  9. 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.
  10. 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.
  11. 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.
  12. This feature is not supported yet. The end-user cannot skip installation of some files of the setup package.
  13. 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" %*
  14. This issue is resolved in Excelsior Delivery 2.2 beta.
  15. 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
  16. 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.
  17. 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.
  18. lion

    small bugs

    Both issues are fixed in version 1.8 and later
  19. 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.
  20. This issue has been fixed in version 1.8
  21. 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
  22. 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
  23. 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.
  24. 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.
  25. 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!