Added weblinks pkg type, updated README, small bugfixes
This commit is contained in:
20
README.md
20
README.md
@@ -32,6 +32,24 @@ Optional parameters for "zip" type package:
|
|||||||
|
|
||||||
Example for Kdenlive:
|
Example for Kdenlive:
|
||||||
```
|
```
|
||||||
/new-package.sh kdenlive -d "Kdenlive is a free and open-source video editing software." -n "Kdenlive" -g yes -u "https://download.kde.org/stable/kdenlive/22.12/windows/kdenlive-22.12.3.exe" -i "https://kdenlive.org/wp-content/uploads/2016/06/favico.png" -v 22.12.3 -t winbatch-nsis
|
new-package.sh \
|
||||||
|
kdenlive \
|
||||||
|
-d "Kdenlive is a free and open-source video editing software." \
|
||||||
|
-n "Kdenlive" \
|
||||||
|
-g yes \
|
||||||
|
-u "https://download.kde.org/stable/kdenlive/22.12/windows/kdenlive-22.12.3.exe" \
|
||||||
|
-i "https://kdenlive.org/wp-content/uploads/2016/06/favico.png" \
|
||||||
|
-v 22.12.3 \
|
||||||
|
-t winbatch-nsis
|
||||||
```
|
```
|
||||||
Then adjust the Uninstall path in uninstall.ins
|
Then adjust the Uninstall path in uninstall.ins
|
||||||
|
|
||||||
|
|
||||||
|
Most basic example for weblinks package type:
|
||||||
|
```
|
||||||
|
new-package.sh \
|
||||||
|
link-collection \
|
||||||
|
-t weblinks \
|
||||||
|
-l "First link to Google;https://google.com;desktop" \
|
||||||
|
-l "Another link but to Yahoo;https://yahoo.com;both"
|
||||||
|
```
|
||||||
66
fetch-favicon.sh
Normal file
66
fetch-favicon.sh
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
###
|
||||||
|
# Consumes a given image to convert it to ICO
|
||||||
|
# @param Path to the input file
|
||||||
|
###
|
||||||
|
function convertToIco {
|
||||||
|
imageWidth=$(identify -ping -format '%w ' "${1}" | awk -F' ' '{ print $NF }')
|
||||||
|
imageHeight=$(identify -ping -format '%h ' "${1}" | awk -F' ' '{ print $NF }')
|
||||||
|
|
||||||
|
if [ ${imageWidth} -lt 64 ] || [ ${imageHeight} -lt 64 ]; then
|
||||||
|
echo "Warning: Favicon is only ${imageWidth}x${imageHeight}, it'll probably look pixely"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mimeType=$(file -bi "${1}")
|
||||||
|
if [ $? -eq 0 ] && ! grep -qE "^image/vnd.microsoft.icon" <<< "${mimeType}"; then
|
||||||
|
if convert "${1}" -resize "64x64" "$(dirname "${1}")/$(basename "${1}" ".${1##*.}").ico"; then
|
||||||
|
rm "${1}"
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
###
|
||||||
|
# Tries to download the favicon of a website
|
||||||
|
# @param URL of the website
|
||||||
|
# @param Filename of the downloaded ico file
|
||||||
|
###
|
||||||
|
function fetchFavicon {
|
||||||
|
domain=$(awk -F'/' '{ print $3 }' <<< "${1}")
|
||||||
|
protoAndDomain=$(awk -F'/' '{ print $1"//"$3 }' <<< "${1}")
|
||||||
|
|
||||||
|
echo "Fetching favicon for ${protoAndDomain}"
|
||||||
|
|
||||||
|
faviconUrl=$(curl -s -L "${1}" | grep -E '<link.*rel="icon"' | sed 's/.*href="\([^"]*\)".*/\1/' 2>/dev/null)
|
||||||
|
if [ $? -eq 0 ] && [ "${faviconUrl}" != "" ]; then
|
||||||
|
if ! grep -E "https?://" <<< "${faviconUrl}"; then
|
||||||
|
faviconUrl="${protoAndDomain}${faviconUrl}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mimeType=$(curl -Lso "${2}" -w "%{content_type}" "${faviconUrl}")
|
||||||
|
if [ $? -eq 0 ] && grep -E '^image/' <<< "${mimeType}"; then
|
||||||
|
echo "Success using link tag method"
|
||||||
|
convertToIco "${2}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
curlOut=($(curl -Lso "${2}" -w '%{http_code} %{content_type}' "${protoAndDomain}/favicon.ico"))
|
||||||
|
if [ $? -eq 0 ] && [ "${curlOut[0]}" = "200" ] && grep -qE '^image/' <<< "${curlOut[1]}"; then
|
||||||
|
echo "Success using /favicon.ico method"
|
||||||
|
convertToIco "${2}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
curlOut=($(curl -Lso "${2}" -w '%{http_code} %{content_type}' "https://www.google.com/s2/favicons?domain=${domain}&sz=64"))
|
||||||
|
if [ $? -eq 0 ] && [ "${curlOut[0]}" = "200" ] && grep -qE '^image/' <<< "${curlOut[1]}"; then
|
||||||
|
echo "Success using Google Favicons API"
|
||||||
|
convertToIco "${2}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Failed. You'll have to supply your own icon file at:"
|
||||||
|
echo " ${2}"
|
||||||
|
}
|
||||||
221
new-package.sh
221
new-package.sh
@@ -6,25 +6,33 @@ function usage {
|
|||||||
echo " $0 <product-id>"
|
echo " $0 <product-id>"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Optional parameters:"
|
echo "Optional parameters:"
|
||||||
echo " -d <Product Description> Adds a description to the package"
|
echo " -d <Product Description> Adds a description to the package"
|
||||||
echo " -n <Product Name> Adds a product name instead of autogenerating one"
|
echo " -n <Product Name> Adds a product name instead of autogenerating one"
|
||||||
echo " -g yes Adds the Gruelag prefix to package ID and name"
|
echo " -g yes Adds the Gruelag prefix to package ID and name, do not manually add Gruelag when using this!"
|
||||||
echo " -u <Program URL> Downloads an installer file from the specified URL"
|
echo " -u <Program URL> Downloads an installer file from the specified URL"
|
||||||
echo " -i <Logo URL> Applies a logo to the package from the specified URL"
|
echo " -i <Logo URL> Applies a logo to the package from the specified URL"
|
||||||
echo " -t <Package Type> Sets the type of package to create, see below"
|
echo " -t <Package Type> Sets the type of package to create, see below"
|
||||||
echo " -v <Program version> Sets the version of the program (not the package)"
|
echo " -v <Program version> Sets the version of the program (not the package)"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Package types:"
|
echo "Package types:"
|
||||||
echo " winbatch Creates a blank WinBatch package"
|
echo " winbatch Creates a blank WinBatch package"
|
||||||
echo " winbatch-inno Creates a blank INNO Installer WinBatch package"
|
echo " winbatch-inno Creates a blank INNO Installer WinBatch package"
|
||||||
echo " winbatch-nsis Creates a blank NSIS Installer WinBatch package"
|
echo " winbatch-nsis Creates a blank NSIS Installer WinBatch package"
|
||||||
echo " dosicon Creates a blank DosInAnIcon package"
|
echo " dosicon Creates a blank DosInAnIcon package"
|
||||||
echo " execps Creates a blank ExecWith Powershell package"
|
echo " execps Creates a blank ExecWith Powershell package"
|
||||||
echo " zip Creates a blank ZIP based package"
|
echo " zip Creates a blank ZIP based package"
|
||||||
echo " msi Creates a blank MSI installer package"
|
echo " msi Creates a blank MSI installer package"
|
||||||
|
echo " weblinks Creates a weblink creator package"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Optional parameters for ZIP type package:"
|
echo "Parameters for 'zip' type package:"
|
||||||
echo " -e <filename.exe> Specifies the launcher executable inside the ZIP file"
|
echo " -e <filename.exe> Optional, specifies the launcher executable inside the ZIP file"
|
||||||
|
echo ""
|
||||||
|
echo "Parameters for 'weblinks' type package:"
|
||||||
|
echo " -l <link name>;<target url>;[<where>] Can be used multiple times, specifies the URL and display name for one web link."
|
||||||
|
echo " <where> is optional and can hold one of the following values:"
|
||||||
|
echo " 'desktop' to create only desktop links on the public user desktop"
|
||||||
|
echo " 'startmenu' to create links only in the public user start menu"
|
||||||
|
echo " 'both' to create links at both places, this is the default"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ "$1" = "" ]]; then
|
if [[ "$1" = "" ]]; then
|
||||||
@@ -44,9 +52,10 @@ fi
|
|||||||
# Defaults
|
# Defaults
|
||||||
programVersion="1.0"
|
programVersion="1.0"
|
||||||
pkgType="default"
|
pkgType="default"
|
||||||
|
weblinks=()
|
||||||
|
|
||||||
# Read command flags
|
# Read command flags
|
||||||
while getopts ":d:g:n:t:e:u:i:v:" flag
|
while getopts ":d:g:n:t:e:u:i:v:l:" flag
|
||||||
do
|
do
|
||||||
case "${flag}" in
|
case "${flag}" in
|
||||||
d) productDescription="${OPTARG}";;
|
d) productDescription="${OPTARG}";;
|
||||||
@@ -57,27 +66,48 @@ do
|
|||||||
u) downloadUrl="${OPTARG}";;
|
u) downloadUrl="${OPTARG}";;
|
||||||
i) imageUrl="${OPTARG}";;
|
i) imageUrl="${OPTARG}";;
|
||||||
v) programVersion="${OPTARG}";;
|
v) programVersion="${OPTARG}";;
|
||||||
|
l) weblinks+=("${OPTARG}");;
|
||||||
*)
|
*)
|
||||||
|
echo "Unrecognized option '${flag}'"
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
productId="${productIdPrefix}${productId}"
|
# Test if product ID was supplied empty
|
||||||
|
if [ "${productId}" = "" ]; then
|
||||||
|
echo "Product ID is empty, aborting!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate product name from ID if it's not set
|
fullProductName="${productName}"
|
||||||
|
|
||||||
|
# Generate product name from ID if it is not set already
|
||||||
if [ "${productName}" = "" ]; then
|
if [ "${productName}" = "" ]; then
|
||||||
|
# Replace dashes with spaces and uppercase first letter of every word
|
||||||
productName=$(echo "${productId//-/ }" | sed -r 's/\<./\U&/g')
|
productName=$(echo "${productId//-/ }" | sed -r 's/\<./\U&/g')
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "-- Package data --"
|
# Prepend optional prefixes to product name and ID if they aren't already
|
||||||
|
if [ "${productIdPrefix}" != "" ] && \
|
||||||
|
[ "${productId:0:${#productIdPrefix}}" != "${productIdPrefix}" ];
|
||||||
|
then
|
||||||
|
productId="${productIdPrefix}${productId}"
|
||||||
|
fullProductName="${productNamePrefix}${productName}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Dump some package info
|
||||||
|
echo "-- Package info --"
|
||||||
echo "ID: ${productId}"
|
echo "ID: ${productId}"
|
||||||
echo "Name: ${productName}"
|
echo "Name: ${fullProductName}"
|
||||||
echo "Description: ${productDescription}"
|
echo "Description: ${productDescription}"
|
||||||
|
echo "Type: ${pkgType}"
|
||||||
echo "-- --"
|
echo "-- --"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
|
||||||
echo "Creating package directory..."
|
echo "Creating package directory..."
|
||||||
if [ -d "${productId}" ]; then
|
if [ -d "${productId}" ]; then
|
||||||
echo "A folder with the package name already exists"
|
echo "A folder with the package name already exists"
|
||||||
@@ -88,13 +118,13 @@ elif ! mkdir "${productId}"; then
|
|||||||
fi
|
fi
|
||||||
pushd "${productId}" >/dev/null
|
pushd "${productId}" >/dev/null
|
||||||
|
|
||||||
echo "Creating control file..."
|
|
||||||
|
|
||||||
cat >control <<-EOF
|
echo "Creating control file..."
|
||||||
|
cat >control <<EOF
|
||||||
[Product]
|
[Product]
|
||||||
type: localboot
|
type: localboot
|
||||||
id: ${productId}
|
id: ${productId}
|
||||||
name: ${productNamePrefix} ${productName}
|
name: ${productName}
|
||||||
description: ${productDescription}
|
description: ${productDescription}
|
||||||
version: ${programVersion}
|
version: ${programVersion}
|
||||||
packageVersion: 1.0
|
packageVersion: 1.0
|
||||||
@@ -102,6 +132,8 @@ setupScript: install.ins
|
|||||||
uninstallScript: remove.ins
|
uninstallScript: remove.ins
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
|
# Optionally download program file
|
||||||
if [ ! "${downloadUrl}" = "" ]; then
|
if [ ! "${downloadUrl}" = "" ]; then
|
||||||
echo "Downloading program file..."
|
echo "Downloading program file..."
|
||||||
|
|
||||||
@@ -110,13 +142,13 @@ if [ ! "${downloadUrl}" = "" ]; then
|
|||||||
|
|
||||||
_filename=$(curl -f -s -w "%{filename_effective}" -L -O "${downloadUrl}")
|
_filename=$(curl -f -s -w "%{filename_effective}" -L -O "${downloadUrl}")
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "Curl did not manage to download the file from ${downloadUrl}"
|
echo "Curl failed to download the file from ${downloadUrl}"
|
||||||
else
|
else
|
||||||
bytes=$(wc -c "${_filename}" | awk '{ print $1 }')
|
bytes=$(wc -c "${_filename}" | awk '{ print $1 }')
|
||||||
if [ ${bytes} -le 1 ]; then
|
if [ ${bytes} -le 1 ]; then
|
||||||
echo "Program file was downloaded, but is ${bytes} bytes in size!"
|
echo "Program file was downloaded, but is ${bytes} bytes in size!"
|
||||||
else
|
else
|
||||||
echo "Program file downloaded to data/${_filename}, ${bytes} length"
|
echo "Program file downloaded to data/${_filename}, ${bytes} bytes in size"
|
||||||
filename="${_filename}"
|
filename="${_filename}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -124,7 +156,8 @@ if [ ! "${downloadUrl}" = "" ]; then
|
|||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
## START Some reusable code snippets as variables:
|
|
||||||
|
# Some reusable code snippets as variables:
|
||||||
read -r -d '' Sub_HandleExitCode <<EOS
|
read -r -d '' Sub_HandleExitCode <<EOS
|
||||||
[Sub_HandleExitCode]
|
[Sub_HandleExitCode]
|
||||||
Set \$ExitCode\$ = GetLastExitCode
|
Set \$ExitCode\$ = GetLastExitCode
|
||||||
@@ -148,7 +181,7 @@ LogError "Fatal: setup returned exit code " + \$ExitCode\$
|
|||||||
IsFatalError
|
IsFatalError
|
||||||
endif
|
endif
|
||||||
EOS
|
EOS
|
||||||
## END Some resuable code snippets
|
|
||||||
|
|
||||||
echo "Creating install and remove script files for type ${pkgType}..."
|
echo "Creating install and remove script files for type ${pkgType}..."
|
||||||
case "${pkgType}" in
|
case "${pkgType}" in
|
||||||
@@ -458,7 +491,7 @@ msi)
|
|||||||
[Actions]
|
[Actions]
|
||||||
ShowBitmap "%ScriptPath%\\logo.png" "${productName}"
|
ShowBitmap "%ScriptPath%\\logo.png" "${productName}"
|
||||||
WinBatch_Install
|
WinBatch_Install
|
||||||
Sub_HandleExitCode
|
Sub_HandleExitCode_MSI
|
||||||
|
|
||||||
[WinBatch_Install]
|
[WinBatch_Install]
|
||||||
msiexec /passive /i "%ScriptPath%\\data\\${_instFile}"
|
msiexec /passive /i "%ScriptPath%\\data\\${_instFile}"
|
||||||
@@ -483,6 +516,136 @@ msi)
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo "Make sure the WinBatch_Remove section in remove.ins does the right things!"
|
echo "Make sure the WinBatch_Remove section in remove.ins does the right things!"
|
||||||
|
;;
|
||||||
|
weblinks)
|
||||||
|
cat >install.ins <<-EOF
|
||||||
|
[Initial]
|
||||||
|
Message=Installiere ${productName}...
|
||||||
|
DefVar \$PkgDir\$
|
||||||
|
|
||||||
|
[Actions]
|
||||||
|
ShowBitmap "%ScriptPath%\logo.png" "${productName}"
|
||||||
|
Sub_SetVars
|
||||||
|
Files_CopyIcons
|
||||||
|
Sub "%ScriptPath%\install-desktop.inc.ins"
|
||||||
|
Sub "%ScriptPath%\install-startmenu.inc.ins"
|
||||||
|
|
||||||
|
[Sub_SetVars]
|
||||||
|
Set \$PkgDir\$ = "%ProgramFilesDir%\%installingProdName%"
|
||||||
|
|
||||||
|
[Files_CopyIcons]
|
||||||
|
CheckTargetPath = "\$PkgDir\$"
|
||||||
|
Copy -s "%ScriptPath%\data\icons\" "\$PkgDir\$"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat >remove.ins <<-EOF
|
||||||
|
[Initial]
|
||||||
|
Message=Entferne ${productName}...
|
||||||
|
DefVar $PkgDir$
|
||||||
|
|
||||||
|
[Actions]
|
||||||
|
ShowBitmap "%ScriptPath%\logo.png" "${productName}"
|
||||||
|
Sub_SetVars
|
||||||
|
Files_DeleteIcons
|
||||||
|
Sub "%ScriptPath%\remove-desktop.inc.ins"
|
||||||
|
Sub "%ScriptPath%\remove-startmenu.inc.ins"
|
||||||
|
|
||||||
|
[Sub_SetVars]
|
||||||
|
Set \$PkgDir\$ = "%ProgramFilesDir%\%installingProdName%"
|
||||||
|
|
||||||
|
[Files_DeleteIcons]
|
||||||
|
Del -s -f "\$PkgDir\$"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
source ../fetch-favicon.sh
|
||||||
|
mkdir -p data/icons
|
||||||
|
|
||||||
|
desktopLinkFolderList=$(mktemp)
|
||||||
|
startMenuLinkFolderList=$(mktemp)
|
||||||
|
|
||||||
|
desktopRemoveFolderList=$(mktemp)
|
||||||
|
startMenuRemoveFolderList=$(mktemp)
|
||||||
|
|
||||||
|
for (( i = 0; i < ${#weblinks[@]}; i++ )); do
|
||||||
|
link=${weblinks[${i}]}
|
||||||
|
linkName=$(echo "${link}" | awk -F';' '{ print $1 }')
|
||||||
|
linkInternalName=$(sed "s/[^a-zA-Z-]/_/g" <<< ${linkName})
|
||||||
|
linkTarget=$(echo "${link}" | awk -F';' '{ print $2 }')
|
||||||
|
linkLocation=$(echo "${link}" | awk -F';' '{ print $3 }')
|
||||||
|
|
||||||
|
# Desktop entries
|
||||||
|
if [ "${linkLocation}" = "desktop" ] || [ "${linkLocation}" = "both" ]; then
|
||||||
|
echo "LinkFolder_Desktop_${linkInternalName}" >> "install-desktop.inc.ins"
|
||||||
|
echo "LinkFolder_Remove_Desktop_${linkInternalName}" >> "remove-desktop.inc.ins"
|
||||||
|
|
||||||
|
cat >>"${desktopLinkFolderList}" <<EOP
|
||||||
|
[LinkFolder_Desktop_${linkInternalName}]
|
||||||
|
Set_BaseFolder Common_DesktopDirectory
|
||||||
|
Set_SubFolder ""
|
||||||
|
Set_Link
|
||||||
|
Name: ${linkName}
|
||||||
|
Target: "${linkTarget}"
|
||||||
|
Icon_File: "\$PkgDir\$\\${linkInternalName}.ico"
|
||||||
|
End_Link
|
||||||
|
|
||||||
|
EOP
|
||||||
|
|
||||||
|
cat >>"${desktopRemoveFolderList}" <<-EOP
|
||||||
|
[LinkFolder_Remove_Desktop_${linkInternalName}]
|
||||||
|
Set_BaseFolder Common_DesktopDirectory
|
||||||
|
Set_SubFolder ""
|
||||||
|
Delete_Element "${linkName}"
|
||||||
|
|
||||||
|
EOP
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start menu entries
|
||||||
|
if [ "${linkLocation}" = "startmenu" ] || [ "${linkLocation}" = "both" ]; then
|
||||||
|
echo "LinkFolder_StartMenu_${linkInternalName}" >> "install-startmenu.inc.ins"
|
||||||
|
echo "LinkFolder_Remove_StartMenu_${linkInternalName}" >> "remove-startmenu.inc.ins"
|
||||||
|
|
||||||
|
cat >>"${startMenuLinkFolderList}" <<EOP
|
||||||
|
[LinkFolder_StartMenu_${linkInternalName}]
|
||||||
|
Set_BaseFolder Common_StartMenu
|
||||||
|
Set_SubFolder ""
|
||||||
|
Set_Link
|
||||||
|
Name: ${linkName}
|
||||||
|
Target: "${linkTarget}"
|
||||||
|
Icon_File: "\$PkgDir\$\\${linkInternalName}.ico"
|
||||||
|
End_Link
|
||||||
|
|
||||||
|
EOP
|
||||||
|
|
||||||
|
cat >>"${startMenuRemoveFolderList}" <<-EOP
|
||||||
|
[LinkFolder_Remove_StartMenu_${linkInternalName}]
|
||||||
|
Set_BaseFolder Common_StartMenu
|
||||||
|
Set_SubFolder ""
|
||||||
|
Delete_Element "${linkName}"
|
||||||
|
|
||||||
|
EOP
|
||||||
|
fi
|
||||||
|
|
||||||
|
fetchFavicon "${linkTarget}" "data/icons/${linkInternalName}.ico"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo >> "install-desktop.inc.ins"
|
||||||
|
cat "${desktopLinkFolderList}" >> "install-desktop.inc.ins"
|
||||||
|
|
||||||
|
echo >> "install-startmenu.inc.ins"
|
||||||
|
cat "${startMenuLinkFolderList}" >> "install-startmenu.inc.ins"
|
||||||
|
|
||||||
|
echo >> "remove-desktop.inc.ins"
|
||||||
|
cat "${desktopRemoveFolderList}" >> "remove-desktop.inc.ins"
|
||||||
|
|
||||||
|
echo >> "remove-startmenu.inc.ins"
|
||||||
|
cat "${startMenuRemoveFolderList}" >> "remove-startmenu.inc.ins"
|
||||||
|
|
||||||
|
rm "${desktopLinkFolderList}"
|
||||||
|
rm "${startMenuLinkFolderList}"
|
||||||
|
rm "${desktopRemoveFolderList}"
|
||||||
|
rm "${startMenuRemoveFolderList}"
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
cat >install.ins <<-EOF
|
cat >install.ins <<-EOF
|
||||||
|
|||||||
Reference in New Issue
Block a user