Gtk helloworld start menu example2 clickable .exe

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • rogermatt
    Junior Member
    • Sep 2022
    • 3

    Gtk helloworld start menu example2 clickable .exe

    Hi, I'm new to NSIS, so please bear with my ignorance. I have written a program with C language with a Gtk3 GUI and have packaged it for Debian Linux (Ubuntu) and Windows 10 with Makefile and autoreconf. I have installed MSYS2 and NSIS on Windows 10 and am now attempting to blunder my way through the NSIS installer. I have created a simple helloworld Gtk window executable, which I have copied to the working directory. Using Example2 from the NSIS Examples to install to the Windows 10 Start Menu with
    File "helloworld.exe", and uninstall.exe. These are installed, but the helloworld.exe will only run from the MSYS2 terminal prompt (in both the working directory and the destination directory, ./helloworld.exe), if I click on the icon in the start menu, or use
    Section "Section3"
    Exec '"$INSTDIR\helloworld.exe"'
    SectionEnd
    then I get an error dialogue that reads: System Error: libgtk-3-0.dll and libgobject-2.0-0.dll not found. If I copy these two .dll files to the working directory then use
    File "helloworld.exe"
    !insertmacro InstallLib DLL SHARED REBOOT_NOTPROTECTED libgtk-3-0.dll $INSTDIR\libgtk-3-0.dll $INSTDIR
    and same for libgobject-2.0-0.dll, then get Application Error: Application unable to start correctly (0xc000007b) dialogue. I get these same errors if I use !insertmacro or not.

    Is !insertmacro InstallLib the way to do this? If so, do I need the other files associated with the .dll files?
    Could this be a matter of using the "PATH" environment variable? If so, how is this done?
    Should I use a plugin for C?
    Many Thanks,
    Roger.
  • Anders
    Moderator
    • Jun 2002
    • 5643

    #2
    InstallLib is for when you need to register a .dll or install one to $sysdir, and you are doing neither. Just use "File" to extract the required files to $InstDir.

    https://dependencywalker.com/ might also be useful...
    IntOp $PostCount $PostCount + 1

    Comment

    • rogermatt
      Junior Member
      • Sep 2022
      • 3

      #3
      Hi Anders,
      yes, "File" copies them to $InstDir but it still won't click-start, it's getting late and I'll need more time to work on it. Doesn't ldd do a similar thing to dependancywalker ?
      Thanks Again,
      Roger.

      Comment

      • Anders
        Moderator
        • Jun 2002
        • 5643

        #4
        Yes it is similar.
        Run it on your .exe in $instdir to figure out what is missing.

        This is not really a NSIS question, it is better to ask the gtk people which runtime files you need or link them all statically.
        IntOp $PostCount $PostCount + 1

        Comment

        • rogermatt
          Junior Member
          • Sep 2022
          • 3

          #5
          Hi Anders,
          yes, it probably is a gtk question, I have a further question though. I am using a 64-bit machine, the example2.exe is installed to
          C:\'Program Files (x86)'\Example2\helloworld.exe
          I have been told that 'Program Files (x86)' is where 32-bit programs are installed, is this correct?
          Thanks,
          Roger

          Comment

          • Anders
            Moderator
            • Jun 2002
            • 5643

            #6
            If the program you are installing is 64-bit then you may set the instdir to $programfiles64 instead. Depending on what you are doing you might want "SetRegView 64" in .onInit and un.onInit as well.

            If the program .exe is 32-bit then do nothing.
            IntOp $PostCount $PostCount + 1

            Comment

            Working...
            X