18

I am using cx-freeze to create an MSI installer for a Python application. How can I install a link to the application from the desktop?

joshuanapoli
  • 2,509
  • 3
  • 25
  • 34
  • possible duplicate of [Use cx-freeze to create an msi installer that installs a child installer](http://stackoverflow.com/questions/15733405/use-cx-freeze-to-create-an-msi-installer-that-installs-a-child-installer) – Rob Mensching Mar 31 '13 at 22:40
  • 3
    The questions are different. In this question, I want to create a desktop icon. The other question asks about bundling several MSI installers. – joshuanapoli Apr 01 '13 at 13:30

1 Answers1

36

To create a shortcut to the application, give the shortcut_name and shortcut_dir options to the Executable. The shortcut_dir can name any of the System Folder Properties (thanks Aaron). For example:

from cx_Freeze import *

setup(
    executables = [
        Executable(
            "MyApp.py",
            shortcut_name="DTI Playlist",
            shortcut_dir="DesktopFolder",
            )
        ]
    )

You can also add items to the MSI Shortcut table. This lets you create multiple shortcuts and set the working directory (the "start in" setting of the shortcut).

from cx_Freeze import *

# http://msdn.microsoft.com/en-us/library/windows/desktop/aa371847(v=vs.85).aspx
shortcut_table = [
    ("DesktopShortcut",        # Shortcut
     "DesktopFolder",          # Directory_
     "DTI Playlist",           # Name that will be show on the link
     "TARGETDIR",              # Component_
     "[TARGETDIR]playlist.exe",# Target exe to exexute
     None,                     # Arguments
     None,                     # Description
     None,                     # Hotkey
     None,                     # Icon
     None,                     # IconIndex
     None,                     # ShowCmd
     'TARGETDIR'               # WkDir
     )
    ]

# Now create the table dictionary
msi_data = {"Shortcut": shortcut_table}

# Change some default MSI options and specify the use of the above defined tables
bdist_msi_options = {'data': msi_data}

setup(
    options = {
        "bdist_msi": bdist_msi_options,
    },
    executables = [
        Executable(
            "MyApp.py",
            )
        ]
    )
NameVergessen
  • 598
  • 8
  • 26
joshuanapoli
  • 2,509
  • 3
  • 25
  • 34