MAKEMSI quickly and reliably creates MSI files in a non-programmatic way
Have your say! Join the MAKEMSI discussion list or view archive! Suggest improvements. No question too simple or too complex.
[Bottom][Contents][Prev]: Read Me dialogs (rtf formatted text in scrollable control)[Next]: Start Program at End of Install
Have your say! Join the MAKEMSI discussion list or view archive! Suggest improvements. No question too simple or too complex.
\->Tips and Tricks->User Interface Tips->Remote Desktop Shortcuts

Remote Desktop Shortcuts

This is an example of how remote desktop connection shortcuts could be created. This macro could be configured to be useful outside of MAKEMSI, for example by invoking a small script via PPWIZARD to create the files directly in the start menu!

The following code tests the macros which are defined below:

;----------------------------------------------------------------------------
;--- Test Creation of Remote Desktop (terminal services) Shortcuts ----------
;----------------------------------------------------------------------------
#define  SCRD_BRANCH_AU     Branch Servers\AU
#define  SCRD_BRANCH_NZ     Branch Servers\NZ
<$ScRemoteDesktop>
    <$ScRemoteDesktopSc Host="BRANCHAU001" ScDir="<$SCRD_BRANCH_AU>">
    <$ScRemoteDesktopSc Host="BRANCHAU002" ScDir="<$SCRD_BRANCH_AU>">
    ;...
    <$ScRemoteDesktopSc Host="BRANCHNZ99" ScDir="<$SCRD_BRANCH_NZ>">
<$/ScRemoteDesktop>

This is the reusable code which could be placed into your configuration header file:

;----------------------------------------------------------------------------
;--- Create Macros ----------------------------------------------------------
;----------------------------------------------------------------------------
#define? REMOTEDESKTOPSC_ROOTDIR             <$MAKEMSI_OTHER_DIR>\ScRemoteDesktop
#define? REMOTEDESKTOPSC_ROOTDIR_SC          [StartMenuFolder]\$$$RemoteDesktop$$$      ;;If empty not creating shortcuts (makes it useful outside of MAKEMSI)
#define? REMOTEDESKTOPSC_IN_DOCO             N                                            ;;Show as file in doco?
#define? REMOTEDESKTOPSC_DEFAULT_DOMAIN
#define? REMOTEDESKTOPSC_DEFAULT_SCREENX     1024
#define? REMOTEDESKTOPSC_DEFAULT_SCREENY     768
#define? REMOTEDESKTOPSC_DEFAULT_SCREEN_MODE 2                        ;;2=Fullscreen 1=?
#define? REMOTEDESKTOPSC_DEFAULT_SCREEN_BPP  8                        ;;BitsPerPixel: 8=256 colors (fastest)
#(
    #define ScRemoteDesktopSc

    ;--- Make sure we are nested within a "ScRemoteDesktop" block -----------
    #if [RxRemoteDesktopStartedAt = '']
        ;--- We haven't started one yet! ------------------------------------
        #error ^You haven't started a "ScRemoteDesktop" yet!^
    #endif

    ;--- Create the "shortcut" from a template ------------------------------
    #output '<$REMOTEDESKTOPSC_ROOTDIR>\{$ScDir=^^}\{$Title=^{$Host}^}.rdp' ASIS
    #( '<?NewLine>'
        screen mode id:i:{$ScreenMode=^<$REMOTEDESKTOPSC_DEFAULT_SCREEN_MODE>^}
        desktopwidth:i:{$ScreenX=^<$REMOTEDESKTOPSC_DEFAULT_SCREENX>^}
        desktopheight:i:{$ScreenY=^<$REMOTEDESKTOPSC_DEFAULT_SCREENY>^}
        session bpp:i:{$BBP=^<$REMOTEDESKTOPSC_DEFAULT_SCREEN_BPP>^}
        winposstr:s:0,1,174,23,974,623
        full address:s:{$Host}
        compression:i:1
        keyboardhook:i:2
        audiomode:i:0
        redirectdrives:i:0
        redirectprinters:i:1
        redirectcomports:i:0
        redirectsmartcards:i:1
        displayconnectionbar:i:1
        autoreconnection enabled:i:1
        username:s:{$UserId=^^}
        domain:s:{$Domain=^<$REMOTEDESKTOPSC_DEFAULT_DOMAIN>^}
        alternate shell:s:
        shell working directory:s:
        disable wallpaper:i:1
        disable full window drag:i:1
        disable menu anims:i:1
        disable themes:i:1
        disable cursor setting:i:0
        bitmapcachepersistenable:i:1
    #)
    #output
#)
#RexxVar RxRemoteDesktopStartedAt = ^^
#(
    ;--- START of remote desktop definitions --------------------------------
    #define ScRemoteDesktop

    ;--- Nesting validation --------------------------------------------------
    #PUSH "ScRemoteDesktop"
    #if [RxRemoteDesktopStartedAt <> '']
        ;--- We haven't finished the previous one yet! ----------------------
        #error ^You can't nest the "ScRemoteDesktop" command!{NL}Previous remote desktop started at: <??RxRemoteDesktopStartedAt>^
    #endif
    #RexxVar RxRemoteDesktopStartedAt = ^<?=GetInputFileNameAndLine()>^

    ;--- Remove any existing shortcuts from previous builds -----------------
    #if DirQueryExists('<$REMOTEDESKTOPSC_ROOTDIR>') <> ''
        #evaluate ^^ ^call AddressCmd 'rd "<$REMOTEDESKTOPSC_ROOTDIR>" /q /s >nul <$Stderr2Out>'^
        #if DirQueryExists('<$REMOTEDESKTOPSC_ROOTDIR>') <> ''
            #error ^We are trying to clear all previously generated remote desktop shortcuts.{NL}{NL}Failed deleting the directory (probably in use):{NL}{NL}  <$REMOTEDESKTOPSC_ROOTDIR>^
        #endif
    #endif
#)
#(
    ;--- END of remote desktop definitions ----------------------------------
    #define /ScRemoteDesktop

    ;--- Nesting validation --------------------------------------------------
    #if [RxRemoteDesktopStartedAt = '']
        ;--- We haven't started one yet! ------------------------------------
        #error ^You haven't started a "ScRemoteDesktop" yet!^
    #endif
    #POP     "ScRemoteDesktop"
    #RexxVar RxRemoteDesktopStartedAt = ^^

    ;--- We expect to have seen at least one remote desktop -----------------
    #if DirQueryExists('<$REMOTEDESKTOPSC_ROOTDIR>') = ''
        #error ^The directory "<$REMOTEDESKTOPSC_ROOTDIR>" doesn't exist (no shortcuts)!^
    #elseif
        ;--- Have shortcuts (want to add them to an MSI?) -------------------
        #if ['<$REMOTEDESKTOPSC_ROOTDIR_SC>' <> '']
            ;--- Being used in MAKEMSI to create shortcuts (not creating shortcuts "directly") ---
            <$Files "<$REMOTEDESKTOPSC_ROOTDIR>\*.*"  DestDir="<$REMOTEDESKTOPSC_ROOTDIR_SC>" SUBDIR="TREE" DOCO="<$REMOTEDESKTOPSC_IN_DOCO>">

            ;--- Need to ignore some validation messages --------------------
            <$MsiValFilter "It must use a registry key under HKCU as its KeyPath, not a file">
            <$MsiValFilter "in the user profile but is not listed in the RemoveFile table">
        #endif
    #endif
#)


Microsoft awarded me an MVP (Most Valuable Professional award) in 2004, 2005, 2006, 2007, 2008 & 2009 for the Windows SDK (Windows Installer) area.Please email me any feedback, additional information or corrections.
See this page online (look for updates)

[Top][Contents][Prev]: Read Me dialogs (rtf formatted text in scrollable control)[Next]: Start Program at End of Install


MAKEMSI© is (C)opyright Dennis Bareis 2003-2008 (All rights reserved).
Saturday May 28 2022 at 3:11pm
Visit MAKEMSI's Home Page
Microsoft awarded me an MVP (Most Valuable Professional award) in 2004, 2005, 2006, 2007, 2008 & 2009 for the Windows SDK (Windows Installer) area.