DEV Community

abdfn
abdfn

Posted on • Edited on

Create a .msi file for go program

Hi everyone, long time no write anything, but I had a lot of projects and stresses to study, but now, we'll create a .msi file for go program

Pre-requisites

What's we'll use?

Package go-msi helps to generate MSI package for a Go project.

installation

by go

go get github.com/mh-cbon/go-msi 
Enter fullscreen mode Exit fullscreen mode

by Chocolatey

choco install go-msi 
Enter fullscreen mode Exit fullscreen mode

for more, visit https://mh-cbon.github.io/go-msi/#install

ok, now let's create a simple go file msi.go

package main import "fmt" func main() { fmt.Println("Gen MSI File") } 
Enter fullscreen mode Exit fullscreen mode

build it

go build 
Enter fullscreen mode Exit fullscreen mode

wix.json

to create a .msi file, we need wix.json

{ "product": "YOUR_PRODUCT_NAME", "company": "YOUR_COMPANY_NAME", "license": "LICENSE", "upgrade-code": "", "files": { "guid": "", "items": [ "path/to/msi.exe", ] }, "env": { "guid": "", "vars": [ { "name": "PATH", "value": "[INSTALLDIR]", "permanent": "no", "system": "no", "action": "set", "part": "last" } ] }, "shortcuts": {}, "choco": { "description": "YOUR_DESC", "project-url": "YOUR_PROJECT_URL", "tags": "TAGS YOU NEED", "license-url": "YOUR_LICENSE_URL" } } 
Enter fullscreen mode Exit fullscreen mode

our guid props are empty, run this command

go-msi set-guid 
Enter fullscreen mode Exit fullscreen mode

Create Interfaces

we'll create three user interfaces

  1. License Agreement Page
  2. WiX UI
  3. Product Page

now create three files

  • LicenseAgreementDlg_HK.wsx
  • product.wsx
  • WixUI_HK.wsx

download these files here

put these files in folder, like templates folder

Generate

go-msi make --msi YOUR_PRODUCT_NAME.msi --version YOUR_VERSION -s ./path/to/*.wsx 
Enter fullscreen mode Exit fullscreen mode

now you can test your msi file

👋

Top comments (4)

Collapse
 
psteffensen profile image
psteffensen

Thank you for this tutorial. It works!

What can I do if I want to run one of my exe files during or after the install?

Collapse
 
psteffensen profile image
psteffensen • Edited

I got it working. I got help from this: wixtoolset.org/documentation/manua...

So the end of product.wxs looks like this now:

 <UI> <!-- Define the installer UI --> <UIRef Id="WixUI_HK" /> <Publish Dialog="ExitDialog" Control="Finish" Event="DoAction" Value="LaunchApplication">WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed </Publish> </UI> <Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" /> <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Install Measurement Server Service" /> <Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/> <!-- this should help to propagate env var changes --> <CustomActionRef Id="WixBroadcastEnvironmentChange" /> <Property Id="WixShellExecTarget" Value="[#ApplicationFile1]" /> <CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" /> </Product> 
Enter fullscreen mode Exit fullscreen mode
Collapse
 
abdfnx profile image
abdfn

nice

Collapse
 
efmanu profile image
Manu Francis

Nice tutorial.

One question, how can I modify wix.json for storing error logs of installed app to a file?