summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/prepare-install-package.targets2
-rw-r--r--src/SMAPI.Installer/assets/unix-install.sh10
-rw-r--r--src/SMAPI.Installer/assets/unix-launcher.sh36
-rw-r--r--src/SMAPI.Installer/assets/windows-install.bat29
4 files changed, 65 insertions, 12 deletions
diff --git a/build/prepare-install-package.targets b/build/prepare-install-package.targets
index dd28266d..ef5624ad 100644
--- a/build/prepare-install-package.targets
+++ b/build/prepare-install-package.targets
@@ -38,8 +38,6 @@
<Copy SourceFiles="$(TargetDir)\assets\README.txt" DestinationFolder="$(PackagePath)" />
<Copy SourceFiles="$(TargetDir)\assets\windows-exe-config.xml" DestinationFiles="$(PackagePath)\internal\$(PlatformName)\install.exe.config" Condition="$(PlatformName) == 'windows'" />
<Copy SourceFiles="$(TargetDir)\$(TargetName).dll" DestinationFolder="$(PackagePath)\internal\$(PlatformName)" />
- <Copy SourceFiles="$(TargetDir)\$(TargetName).exe" DestinationFiles="$(PackagePath)\internal\$(PlatformName)\install.exe" Condition="$(PlatformName) == 'windows'" />
- <Copy SourceFiles="$(TargetDir)\$(TargetName)" DestinationFiles="$(PackagePath)\internal\$(PlatformName)\install" Condition="$(PlatformName) != 'windows'" />
<Copy SourceFiles="$(TargetDir)\$(TargetName).runtimeconfig.json" DestinationFolder="$(PackagePath)\internal\$(PlatformName)" />
<!--copy bundle files-->
diff --git a/src/SMAPI.Installer/assets/unix-install.sh b/src/SMAPI.Installer/assets/unix-install.sh
index f5de7b16..07df4e6c 100644
--- a/src/SMAPI.Installer/assets/unix-install.sh
+++ b/src/SMAPI.Installer/assets/unix-install.sh
@@ -3,8 +3,12 @@
# Move to script's directory
cd "`dirname "$0"`"
-# if $TERM is not set to xterm, mono will bail out when attempting to write to the console.
-export TERM=xterm
+# make sure .NET 5 is installed
+if ! command -v dotnet >/dev/null 2>&1; then
+ echo "Oops! You must have .NET 5 installed to use SMAPI: https://dotnet.microsoft.com/download";
+ read
+ exit 1
+fi
# run installer
-./internal/unix/install
+dotnet internal/unix/SMAPI.Installer.dll
diff --git a/src/SMAPI.Installer/assets/unix-launcher.sh b/src/SMAPI.Installer/assets/unix-launcher.sh
index 21bed803..0e700b61 100644
--- a/src/SMAPI.Installer/assets/unix-launcher.sh
+++ b/src/SMAPI.Installer/assets/unix-launcher.sh
@@ -10,7 +10,15 @@ if [ ! -f "Stardew Valley.dll" ]; then
exit 1
fi
+# make sure .NET 5 is installed
+if ! command -v dotnet >/dev/null 2>&1; then
+ echo "Oops! You must have .NET 5 installed to use SMAPI: https://dotnet.microsoft.com/download";
+ read
+ exit 1
+fi
+
# macOS
+UNAME=$(uname)
if [ "$UNAME" == "Darwin" ]; then
# fix "DllNotFoundException: libgdiplus.dylib" errors when loading images in SMAPI
if [ -f libgdiplus.dylib ]; then
@@ -20,8 +28,32 @@ if [ "$UNAME" == "Darwin" ]; then
ln -s /Library/Frameworks/Mono.framework/Versions/Current/lib/libgdiplus.dylib libgdiplus.dylib
fi
- # launch smapi
- open -a Terminal ./StardewModdingAPI "$@"
+ # Make sure we're running in Terminal (so the user can see errors/warnings/update alerts).
+ if [ ! -t 1 ]; then # https://stackoverflow.com/q/911168/262123
+ # sanity check to make sure we don't have an infinite loop of opening windows
+ SKIP_TERMINAL=false
+ for argument in "$@"; do
+ if [ "$argument" == "--no-reopen-terminal" ]; then
+ SKIP_TERMINAL=true
+ break
+ fi
+ done
+
+ # reopen in Terminal if needed
+ # https://stackoverflow.com/a/29511052/262123
+ if [ "$SKIP_TERMINAL" == "false" ]; then
+ echo "Reopening in the Terminal app..."
+ echo "\"$0\" $@ --no-reopen-terminal" > /tmp/open-smapi-terminal.sh
+ chmod +x /tmp/open-smapi-terminal.sh
+ cat /tmp/open-smapi-terminal.sh
+ open -W -a Terminal /tmp/open-smapi-terminal.sh
+ rm /tmp/open-smapi-terminal.sh
+ exit 0
+ fi
+ fi
+
+ # launch SMAPI
+ dotnet StardewModdingAPI.dll "$@"
# Linux
else
diff --git a/src/SMAPI.Installer/assets/windows-install.bat b/src/SMAPI.Installer/assets/windows-install.bat
index 3ca13528..8623f321 100644
--- a/src/SMAPI.Installer/assets/windows-install.bat
+++ b/src/SMAPI.Installer/assets/windows-install.bat
@@ -1,8 +1,27 @@
@echo off
+
+REM make sure we're not running within a zip folder
echo "%~dp0" | findstr /C:"%TEMP%" 1>nul
-if not errorlevel 1 (
- echo Oops! It looks like you're running the installer from inside a zip file. Make sure you unzip the download first.
- pause
-) else (
- start /WAIT /B internal\windows\install.exe
+if %ERRORLEVEL% EQU 0 (
+ echo "Oops! It looks like you're running the installer from inside a zip file. Make sure you unzip the download first."
+ pause
+ exit
)
+
+REM make sure .NET 5 is installed
+WHERE dotnet /q
+if %ERRORLEVEL% NEQ 0 (
+ echo "Oops! You must have .NET 5 (desktop x64) installed to use SMAPI: https://dotnet.microsoft.com/download/dotnet/5.0/runtime"
+ pause
+ exit
+)
+
+REM make sure an antivirus hasn't deleted the installer DLL
+if not exist internal\windows\SMAPI.Installer.dll (
+ echo "Oops! SMAPI can't find its 'internal\windows\SMAPI.Installer.dll' file. Your antivirus might have deleted the file."
+ pause
+ exit
+)
+
+REM start installer
+dotnet internal\windows\SMAPI.Installer.dll