summaryrefslogtreecommitdiff
path: root/updater/extern.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'updater/extern.cpp')
-rw-r--r--updater/extern.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/updater/extern.cpp b/updater/extern.cpp
index 68b572a..39277ed 100644
--- a/updater/extern.cpp
+++ b/updater/extern.cpp
@@ -119,14 +119,23 @@ int ExternProcess(bool restart) {
GetModuleFileName(hInst, szBuf, MAX_PATH);
}
-// p = _tcsrchr(szBuf, _T('\\'));
-// if (p) *p = 0;
+#ifdef _WIN64
+ mir_sntprintf(szParams, SIZEOF(szParams), _T("RUNDLL32.EXE \"%s\",ExternalUpdate %s"), szBuf, data_filename);
+#else
+ p = _tcsrchr(szBuf, _T('\\'));
+ if (p) *p = 0;
// rundll32 hates spaces in the <dll name> arg, but quotes aren't allowed in earlier versions...
// GetShortPath can return paths with spaces (at least on XP with 8.3 filenames disabled)...
// so we must 'CreateProcess' with the updater.dll location as the startup directory and pass only updater.dll as the arg
+#ifdef _MSC_VER
+ // MSVC exports differently than gcc/mingw
+ _stprintf(szParams, _T("RUNDLL32.EXE .\\updater.dll,_ExternalUpdate@16 %s"), data_filename);
+#else
+ _stprintf(szParams, _T("RUNDLL32.EXE .\\updater.dll,ExternalUpdate@16 %s"), data_filename);
+#endif
- mir_sntprintf(szParams, SIZEOF(szParams), _T("RUNDLL32.EXE \"%s\",ExternalUpdate %s"), szBuf, data_filename);
+#endif
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};