Skip to content

Instantly share code, notes, and snippets.

@osnipezzini
Last active January 17, 2023 13:01
Show Gist options
  • Save osnipezzini/799a75d56175fe7c06f5100c1b1a7ae1 to your computer and use it in GitHub Desktop.
Save osnipezzini/799a75d56175fe7c06f5100c1b1a7ae1 to your computer and use it in GitHub Desktop.

Instructions to generate portable

RUSTDESK_PORTABLE.nsi - Edit this file with your needs

Fill all variables with your information ('!define' lines)

Adjust input files (lines 48 to 109)

Lines 111 to 122 handle portable name or args to launch install mode

StrContains.nsh

This files must be copied as is to same folder of RUSTDESK_PORTABLE.nsi

!include LogicLib.nsh
!include WinMessages.nsh
!include FileFunc.nsh
!include StrContains.nsh
############################## HEADER ########################################
!define APP_NAME ""
!define COMP_NAME ""
!define WEB_SITE ""
!define VERSION ""
!define COPYRIGHT ""
!define DESCRIPTION ""
VIProductVersion "${VERSION}"
VIAddVersionKey "ProductName" "${APP_NAME}"
VIAddVersionKey "CompanyName" "${COMP_NAME}"
VIAddVersionKey "LegalCopyright" "${COPYRIGHT}"
VIAddVersionKey "FileDescription" "${DESCRIPTION}"
VIAddVersionKey "FileVersion" "${VERSION}"
Icon "../res/icon.ico"
SetCompressor /SOLID lzma
SetCompressorDictSize 64
SetDatablockOptimize ON
############################## HEADER ########################################
SilentInstall silent
RequestExecutionLevel user ;no elevation needed for this test
ShowInstDetails hide
# this will be the created executable archive
OutFile "..\RUSTDESK.exe"
InstallDir $EXEDIR
# the executable part
Section
# define the output path for the following files
SetOutPath $TEMP\RustDesk
# define what to install and place it in the output path...
File "..\flutter\build\windows\runner\Release\desktop_drop_plugin.dll"
File "..\flutter\build\windows\runner\Release\desktop_multi_window_plugin.dll"
File "..\flutter\build\windows\runner\Release\flutter_custom_cursor_plugin.dll"
File "..\flutter\build\windows\runner\Release\flutter_windows.dll"
File "..\flutter\build\windows\runner\Release\Img2Mem.exe"
File "..\flutter\build\windows\runner\Release\librustdesk.dll"
File "..\flutter\build\windows\runner\Release\screen_retriever_plugin.dll"
File "..\flutter\build\windows\runner\Release\RustDesk.exe"
File "..\flutter\build\windows\runner\Release\TestApp.exe"
File "..\flutter\build\windows\runner\Release\TestAppDebug.exe"
File "..\flutter\build\windows\runner\Release\tray_manager_plugin.dll"
File "..\flutter\build\windows\runner\Release\uni_links_desktop_plugin.dll"
File "..\flutter\build\windows\runner\Release\url_launcher_windows_plugin.dll"
File "..\flutter\build\windows\runner\Release\WindowInjection.dll"
File "..\flutter\build\windows\runner\Release\window_manager_plugin.dll"
File "..\flutter\build\windows\runner\Release\window_size_plugin.dll"
SetOutPath "$TEMP\RustDesk\data"
File "..\flutter\build\windows\runner\Release\data\app.so"
File "..\flutter\build\windows\runner\Release\data\icudtl.dat"
SetOutPath "$TEMP\RustDesk\data\flutter_assets"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\AssetManifest.json"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\FontManifest.json"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\NOTICES.Z"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\packages\window_manager\images"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\window_manager\images\ic_chrome_close.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\window_manager\images\ic_chrome_maximize.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\window_manager\images\ic_chrome_minimize.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\window_manager\images\ic_chrome_unmaximize.png"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\packages\wakelock_web\assets"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\wakelock_web\assets\no_sleep.js"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors\cut_bottom.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors\cut_left.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors\cut_right.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors\cut_top.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors\erase.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\flutter_custom_cursor\assets\cursors\pencil.png"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\packages\dash_chat_2\assets"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\dash_chat_2\assets\placeholder.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\dash_chat_2\assets\profile_placeholder.png"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\packages\cupertino_icons\assets"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\packages\cupertino_icons\assets\CupertinoIcons.ttf"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\fonts"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\fonts\MaterialIcons-Regular.otf"
SetOutPath "$TEMP\RustDesk\data\flutter_assets\assets"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\android.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\gestures.ttf"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\Github.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\Google.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\insecure.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\insecure_relay.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\linux.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\logo.ico"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\logo.png"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\logo.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\mac.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\Okta.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\peer_searchbar.ttf"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\secure.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\secure_relay.svg"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\tabbar.ttf"
File "..\flutter\build\windows\runner\Release\data\flutter_assets\assets\win.svg"
# Check if has -install on exe name
${StrContains} $7 "-install" $EXEPATH
# Get parameters and check if has parameter --install
${GetParameters} $9
ClearErrors
${GetOptions} $9 "--install" $8
${IfNot} ${Errors}
${OrIf} $7 != ""
ExecWait "$TEMP\RustDesk\RustDesk.exe --install"
${Else}
ExecWait "$TEMP\RustDesk\RustDesk.exe"
${EndIf}
SetOutPath $TEMP
RMDir /r $TEMP\RustDesk
# done
SectionEnd
Var /Global STR_HAYSTACK
Var /Global STR_NEEDLE
Var /Global STR_CONTAINS_VAR_1
Var /Global STR_CONTAINS_VAR_2
Var /Global STR_CONTAINS_VAR_3
Var /Global STR_CONTAINS_VAR_4
Var /Global STR_RETURN_VAR
Function StrContains
Exch $STR_NEEDLE
Exch 1
Exch $STR_HAYSTACK
; Uncomment to debug
;MessageBox MB_OK 'STR_NEEDLE = $STR_NEEDLE STR_HAYSTACK = $STR_HAYSTACK '
StrCpy $STR_RETURN_VAR ""
StrCpy $STR_CONTAINS_VAR_1 -1
StrLen $STR_CONTAINS_VAR_2 $STR_NEEDLE
StrLen $STR_CONTAINS_VAR_4 $STR_HAYSTACK
loop:
IntOp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_1 + 1
StrCpy $STR_CONTAINS_VAR_3 $STR_HAYSTACK $STR_CONTAINS_VAR_2 $STR_CONTAINS_VAR_1
StrCmp $STR_CONTAINS_VAR_3 $STR_NEEDLE found
StrCmp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_4 done
Goto loop
found:
StrCpy $STR_RETURN_VAR $STR_NEEDLE
Goto done
done:
Pop $STR_NEEDLE ;Prevent "invalid opcode" errors and keep the
Exch $STR_RETURN_VAR
FunctionEnd
!macro _StrContainsConstructor OUT NEEDLE HAYSTACK
Push "${HAYSTACK}"
Push "${NEEDLE}"
Call StrContains
Pop "${OUT}"
!macroend
!define StrContains '!insertmacro "_StrContainsConstructor"'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment