Add option for installing OpenRGB as a service in Wix installer

This commit is contained in:
Adam Honse
2025-09-13 17:21:22 -05:00
parent 4664a27d6b
commit dbdfd64c98

View File

@@ -60,12 +60,13 @@ do
if [ $filename == "${PRODUCTNAME}.exe" ] ; then
#If this is the executable treat as a special case as we need the reference for later
EXE_ID=${PRODUCTNAME}00
EXE_FILE=${filename}
SVC_ID=${PRODUCTNAME}00_SVC
#Add special entry to files list
FILES="$FILES <File Id='${EXE_ID}' Source='${WORKING_PATH}${filename}' KeyPath='yes'/>\n"
EXE_FILE=" <File Id='${EXE_ID}' Source='${WORKING_PATH}${filename}' KeyPath='yes'/>\n"
SVC_FILE=" <File Id='${SVC_ID}' Source='${WORKING_PATH}${filename}' KeyPath='yes'/>\n"
elif [ -d "$file" ] ; then
#If this is a directory then we need to add another component
COMPONENTS="${COMPONENTS} <ComponentRef Id='${filename}Files'/>\n"
COMPONENTS="${COMPONENTS} <ComponentRef Id='${filename}Files'/>\n"
TEMP=" <Directory Id='${filename}' Name='${filename}'>\n <Component Id='${filename}Files' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\n"
for file2 in "$file"/*;
do
@@ -106,17 +107,54 @@ XML_FILE+=" <Icon Id='OpenRGBIcon' SourceFile='${ICONFILE}'/>\r\n"
XML_FILE+=" <Property Id='ARPPRODUCTICON' Value='OpenRGBIcon'/>\r\n"
XML_FILE+=" <Property Id='ARPURLINFOABOUT' Value='https://www.openrgb.org'/>\r\n"
XML_FILE+=" <Property Id='WIXUI_INSTALLDIR' Value='INSTALLDIR'/>\r\n"
XML_FILE+=" <UIRef Id='WixUI_InstallDir'/>\r\n"
XML_FILE+=" <UIRef Id='WixUI_ErrorProgressText'/>\r\n"
XML_FILE+=" <WixVariable Id='WixUILicenseRtf' Value='${LICENSEFILE}'/>\r\n"
XML_FILE+=" <WixVariable Id='WixUIBannerBmp' Value='${BANNERIMAGE}'/>\r\n"
XML_FILE+=" <WixVariable Id='WixUIDialogBmp' Value='${DIALOGBACKGROUND}'/>\r\n"
XML_FILE+="\r\n"
XML_FILE+=" <UI>\r\n"
XML_FILE+=" <UIRef Id='WixUI_InstallDir'/>\r\n"
XML_FILE+=" <UIRef Id='WixUI_ErrorProgressText'/>\r\n"
XML_FILE+="\r\n"
XML_FILE+=" <Dialog Id='ServiceDialog' Width='370' Height='270' Title='!(loc.InstallDirDlg_Title)'>\r\n"
XML_FILE+=" <Control Id='Next' Type='PushButton' X='236' Y='243' Width='56' Height='17' Default='yes' Text='!(loc.WixUINext)' />\r\n"
XML_FILE+=" <Control Id='Back' Type='PushButton' X='180' Y='243' Width='56' Height='17' Text='!(loc.WixUIBack)' />\r\n"
XML_FILE+=" <Control Id='Cancel' Type='PushButton' X='304' Y='243' Width='56' Height='17' Cancel='yes' Text='!(loc.WixUICancel)'>\r\n"
XML_FILE+=" <Publish Event='SpawnDialog' Value='CancelDlg' />\r\n"
XML_FILE+=" </Control>\r\n"
XML_FILE+="\r\n"
XML_FILE+=" <Control Id='Description' Type='Text' X='25' Y='23' Width='280' Height='15' Transparent='yes' NoPrefix='yes' Text='Choose whether to register ${PRODUCTNAME} as a system service.' />\r\n"
XML_FILE+=" <Control Id='Title' Type='Text' X='15' Y='6' Width='200' Height='15' Transparent='yes' NoPrefix='yes' Text='${PRODUCTNAME} Service' />\r\n"
XML_FILE+=" <Control Id='BannerBitmap' Type='Bitmap' X='0' Y='0' Width='370' Height='44' TabSkip='no' Text='!(loc.InstallDirDlgBannerBitmap)' />\r\n"
XML_FILE+=" <Control Id='BannerLine' Type='Line' X='0' Y='44' Width='373' Height='0' />\r\n"
XML_FILE+=" <Control Id='BottomLine' Type='Line' X='0' Y='234' Width='373' Height='0' />\r\n"
XML_FILE+="\r\n"
XML_FILE+=" <Control Id='TypicalButton' Type='PushButton' X='40' Y='65' Width='200' Height='17' ToolTip='Does not register OpenRGB as a system service. Accessing certain devices will require running the application as administrator.' Default='yes' Text='Do not Install System Service (Default)'>\r\n"
XML_FILE+=" <Publish Property='WixUI_InstallMode' Value='InstallTypical'>1</Publish>\r\n"
XML_FILE+=" <Publish Event='SetInstallLevel' Value='1'>1</Publish>\r\n"
XML_FILE+=" <Publish Event='NewDialog' Value='VerifyReadyDlg'>1</Publish>\r\n"
XML_FILE+=" </Control>\r\n"
XML_FILE+=" <Control Id='CompleteButton' Type='PushButton' X='40' Y='171' Width='200' Height='17' ToolTip='Registers OpenRGB system service, allowing access to devices which require administrator access without having to run the application as administrator.' Text='Install System Service'>\r\n"
XML_FILE+=" <Publish Property='WixUI_InstallMode' Value='InstallComplete'>1</Publish>\r\n"
XML_FILE+=" <Publish Event='SetInstallLevel' Value='2'>1</Publish>\r\n"
XML_FILE+=" <Publish Event='NewDialog' Value='VerifyReadyDlg'>1</Publish>\r\n"
XML_FILE+=" </Control>\r\n"
XML_FILE+=" </Dialog>\r\n"
XML_FILE+="\r\n"
XML_FILE+=" <Publish Dialog='InstallDirDlg' Control='Next' Event='NewDialog' Value='ServiceDialog' Order='5'>WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID=\"1\"</Publish>\r\n"
XML_FILE+=" <Publish Dialog='VerifyReadyDlg' Control='Back' Event='NewDialog' Value='ServiceDialog' Order='2'>1</Publish>\r\n"
XML_FILE+=" <Publish Dialog='ServiceDialog' Control='Next' Event='NewDialog' Value='VerifyReadyDlg' Order='2'>1</Publish>\r\n"
XML_FILE+=" <Publish Dialog='ServiceDialog' Control='Back' Event='NewDialog' Value='InstallDirDlg' Order='2'>1</Publish>\r\n"
XML_FILE+=" </UI>\r\n"
XML_FILE+="\r\n"
XML_FILE+=" <Directory Id='TARGETDIR' Name='SourceDir'>\r\n"
XML_FILE+=" <Directory Id='ProgramFiles64Folder'>\r\n"
XML_FILE+=" <Directory Id='INSTALLDIR' Name='${PRODUCTNAME}'>\r\n"
XML_FILE+=" <Component Id='${PRODUCTNAME}Files' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\r\n"
XML_FILE+="${EXE_FILE}\r\n"
XML_FILE+="${FILES}\r\n"
XML_FILE+=" </Component>\r\n"
XML_FILE+=" <Component Id='${PRODUCTNAME}Service' Guid='"$(uuidgen -t | awk '{ print toupper($0) }')"'>\r\n"
XML_FILE+="${SVC_FILE}\r\n"
XML_FILE+=" <ServiceInstall Id='ServiceInstaller' Type='ownProcess' Name='OpenRGB' DisplayName='OpenRGB' Description='OpenRGB SDK Server' Start='auto' Account='[SERVICEACCOUNT]' Password='[SERVICEPASSWORD]' ErrorControl='normal'/>\r\n"
XML_FILE+=" <ServiceControl Id='StartService' Start='install' Stop='both' Remove='uninstall' Name='OpenRGB' Wait='yes'/>\r\n"
XML_FILE+=" </Component>\r\n"
@@ -131,12 +169,13 @@ XML_FILE+=" <RegistryValue Root='HKCU' Key='Software\[Manufac
XML_FILE+=" </Component>\r\n"
XML_FILE+=" </Directory>\r\n"
XML_FILE+=" </Directory>\r\n"
XML_FILE+=" <Feature Id='Complete' Title='${PRODUCTNAME}' Description='Install all ${PRODUCTNAME} files.' Display='expand' Level='1' ConfigurableDirectory='INSTALLDIR'>\r\n"
XML_FILE+=" <Feature Id='${PRODUCTNAME}Complete' Title='${PRODUCTNAME}' Description='The complete package.' Level='1' AllowAdvertise='no' InstallDefault='local'>\r\n"
XML_FILE+=" <ComponentRef Id='${PRODUCTNAME}Files'/>\r\n"
XML_FILE+=" <Feature Id='${PRODUCTNAME}Application' Title='${PRODUCTNAME}' Description='Install the ${PRODUCTNAME} application files.' Level='1' AllowAdvertise='no' ConfigurableDirectory='INSTALLDIR' InstallDefault='local'>\r\n"
XML_FILE+=" <ComponentRef Id='${PRODUCTNAME}Files'/>\r\n"
XML_FILE+="${COMPONENTS}\r\n"
XML_FILE+=" <ComponentRef Id='ProgramMenuShortcut'/>\r\n"
XML_FILE+=" </Feature>\r\n"
XML_FILE+=" <ComponentRef Id='ProgramMenuShortcut'/>\r\n"
XML_FILE+=" </Feature>\r\n"
XML_FILE+=" <Feature Id='${PRODUCTNAME}RegisterService' Title='${PRODUCTNAME}' Description='Register ${PRODUCTNAME} as a system service.' Display='expand' Level='2' ConfigurableDirectory='INSTALLDIR'>\r\n"
XML_FILE+=" <ComponentRef Id='${PRODUCTNAME}Service'/>\r\n"
XML_FILE+=" </Feature>\r\n"
XML_FILE+=" </Product>\r\n"
XML_FILE+="</Wix>"