diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c615be99c..6be6b4583 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -173,7 +173,7 @@ windows:
- stable
- triggers
script:
- - sh scripts/gitlab-build.sh x86_64-pc-windows-msvc x86_64-pc-windows-msvc installer "" "" windows
+ - sh scripts/gitlab-build.sh x86_64-pc-windows-msvc x86_64-pc-windows-msvc amd64 "" "" windows
tags:
- rust-windows
artifacts:
diff --git a/Cargo.lock b/Cargo.lock
index 680b9606e..a9d9ab7d1 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -22,7 +22,7 @@ version = "1.2.1"
source = "git+https://github.com/paritytech/app-dirs-rs#0b37f9481ce29e9d5174ad185bca695b206368eb"
dependencies = [
"ole32-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -2995,10 +2995,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "shell32-sys"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -4032,7 +4032,7 @@ dependencies = [
"checksum serde_ignored 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "190e9765dcedb56be63b6e0993a006c7e3b071a016a304736e4a315dc01fb142"
"checksum serde_json 1.0.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c9db7266c7d63a4c4b7fe8719656ccdd51acf1bed6124b174f933b009fb10bcb"
"checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c"
-"checksum shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72f20b8f3c060374edb8046591ba28f62448c369ccbdc7b02075103fb3a9e38d"
+"checksum shell32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ee04b46101f57121c9da2b151988283b6beb79b34f5bb29a58ee48cb695122c"
"checksum siphasher 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "833011ca526bd88f16778d32c699d325a9ad302fa06381cd66f7be63351d3f6d"
"checksum siphasher 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "0df90a788073e8d0235a67e50441d47db7c8ad9debd91cbf43736a2a92d36537"
"checksum skeptic 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "24ebf8a06f5f8bae61ae5bbc7af7aac4ef6907ae975130faba1199e5fe82256a"
diff --git a/nsis/installer.nsi b/nsis/installer.nsi
deleted file mode 100644
index c1f403331..000000000
--- a/nsis/installer.nsi
+++ /dev/null
@@ -1,191 +0,0 @@
-!include WinMessages.nsh
-
-!define WND_CLASS "Parity"
-!define WND_TITLE "Parity"
-!define WAIT_MS 5000
-!define SYNC_TERM 0x00100001
-
-!define APPNAME "Parity"
-!define COMPANYNAME "Parity Technologies"
-!define DESCRIPTION "Fast, light, robust Ethereum implementation"
-!define VERSIONMAJOR 1
-!define VERSIONMINOR 12
-!define VERSIONBUILD 0
-!define ARGS ""
-!define FIRST_START_ARGS "--mode=passive ui"
-
-!addplugindir .\
-
-!define HELPURL "https://paritytech.github.io/wiki/" # "Support Information" link
-!define UPDATEURL "https://github.com/paritytech/parity/releases" # "Product Updates" link
-!define ABOUTURL "https://github.com/paritytech/parity" # "Publisher" link
-!define INSTALLSIZE 26120
-
-!define termMsg "Installer cannot stop running ${WND_TITLE}.$\nDo you want to terminate process?"
-!define stopMsg "Stopping ${WND_TITLE} Application"
-
-
-RequestExecutionLevel admin ;Require admin rights on NT6+ (When UAC is turned on)
-
-InstallDir "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
-
-LicenseData "..\LICENSE"
-Name "${COMPANYNAME} ${APPNAME}"
-Icon "logo.ico"
-outFile "installer.exe"
-
-!include LogicLib.nsh
-
-page license
-page directory
-page instfiles
-
-!macro VerifyUserIsAdmin
-UserInfo::GetAccountType
-pop $0
-${If} $0 != "admin" ;Require admin rights on NT4+
- messageBox mb_iconstop "Administrator rights required!"
- setErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
- quit
-${EndIf}
-!macroend
-
-!macro TerminateApp
- Push $0 ; window handle
- Push $1
- Push $2 ; process handle
- DetailPrint "$(stopMsg)"
- FindWindow $0 '${WND_CLASS}' ''
- IntCmp $0 0 done
- System::Call 'user32.dll::GetWindowThreadProcessId(i r0, *i .r1) i .r2'
- System::Call 'kernel32.dll::OpenProcess(i ${SYNC_TERM}, i 0, i r1) i .r2'
- SendMessage $0 ${WM_CLOSE} 0 0 /TIMEOUT=${TO_MS}
- System::Call 'kernel32.dll::WaitForSingleObject(i r2, i ${WAIT_MS}) i .r1'
- IntCmp $1 0 close
- MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION "$(termMsg)" /SD IDYES IDYES terminate IDNO close
- System::Call 'kernel32.dll::CloseHandle(i r2) i .r1'
- Quit
- terminate:
- System::Call 'kernel32.dll::TerminateProcess(i r2, i 0) i .r1'
- close:
- System::Call 'kernel32.dll::CloseHandle(i r2) i .r1'
- done:
- Pop $2
- Pop $1
- Pop $0
-!macroend
-
-function .onInit
- setShellVarContext all
- !insertmacro VerifyUserIsAdmin
-functionEnd
-
-section "install"
- # Files for the install directory - to build the installer, these should be in the same directory as the install script (this file)
- setOutPath $INSTDIR
-
- # Close parity if running
- !insertmacro TerminateApp
-
- # Files added here should be removed by the uninstaller (see section "uninstall")
- file /oname=parity.exe ..\target\x86_64-pc-windows-msvc\release\parity.exe
- file /oname=parity-evm.exe ..\target\x86_64-pc-windows-msvc\release\parity-evm.exe
- file /oname=ethstore.exe ..\target\x86_64-pc-windows-msvc\release\ethstore.exe
- file /oname=ethkey.exe ..\target\x86_64-pc-windows-msvc\release\ethkey.exe
- file /oname=ptray.exe ..\windows\ptray\x64\Release\ptray.exe
-
- file "logo.ico"
- # Add any other files for the install directory (license files, app data, etc) here
-
- # Uninstaller - See function un.onInit and section "uninstall" for configuration
- writeUninstaller "$INSTDIR\uninstall.exe"
-
- # Start Menu
- createDirectory "$SMPROGRAMS\${COMPANYNAME}"
- delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk"
- createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME} Ethereum.lnk" "$INSTDIR\ptray.exe" "ui" "$INSTDIR\logo.ico"
- createShortCut "$DESKTOP\${APPNAME} Ethereum.lnk" "$INSTDIR\ptray.exe" "ui" "$INSTDIR\logo.ico"
-
- # Firewall remove rules if exists
- SimpleFC::AdvRemoveRule "Parity incoming peers (TCP:30303)"
- SimpleFC::AdvRemoveRule "Parity outgoing peers (TCP:30303)"
- SimpleFC::AdvRemoveRule "Parity web queries (TCP:80)"
- SimpleFC::AdvRemoveRule "Parity UDP discovery (UDP:30303)"
-
- # Firewall exception rules
- SimpleFC::AdvAddRule "Parity incoming peers (TCP:30303)" "" 6 1 1 2147483647 1 "$INSTDIR\parity.exe" "" "" "Parity" 30303 "" "" ""
- SimpleFC::AdvAddRule "Parity outgoing peers (TCP:30303)" "" 6 2 1 2147483647 1 "$INSTDIR\parity.exe" "" "" "Parity" "" 30303 "" ""
- SimpleFC::AdvAddRule "Parity UDP discovery (UDP:30303)" "" 17 2 1 2147483647 1 "$INSTDIR\parity.exe" "" "" "Parity" "" 30303 "" ""
-
- # Registry information for add/remove programs
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" "${APPNAME} - ${DESCRIPTION}"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" "$\"$INSTDIR$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\logo.ico$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "${COMPANYNAME}"
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "HelpLink" "$\"${HELPURL}$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLUpdateInfo" "$\"${UPDATEURL}$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\""
- WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}"
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMajor" ${VERSIONMAJOR}
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMinor" ${VERSIONMINOR}
- # There is no option for modifying or repairing the install
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1
- # Set the INSTALLSIZE constant (!defined at the top of this script) so Add/Remove Programs can accurately report the size
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "EstimatedSize" ${INSTALLSIZE}
-
- WriteRegStr HKEY_CURRENT_USER "Software\Microsoft\Windows\CurrentVersion\Run" ${APPNAME} "$INSTDIR\ptray.exe ${ARGS}"
- DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "${APPNAME}"
- ExecShell "" "$INSTDIR\ptray.exe" "${FIRST_START_ARGS}"
-sectionEnd
-
-# Uninstaller
-
-function un.onInit
- SetShellVarContext all
-
- #Verify the uninstaller - last chance to back out
- MessageBox MB_OKCANCEL "Permanently remove ${APPNAME}?" IDOK next
- Abort
-
- next:
- !insertmacro VerifyUserIsAdmin
-functionEnd
-
-section "uninstall"
- !insertmacro TerminateApp
- # Remove Start Menu launcher
- delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk"
- delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME} Ethereum.lnk"
- delete "$DESKTOP\${APPNAME} Ethereum.lnk"
-
- # Try to remove the Start Menu folder - this will only happen if it is empty
- rmDir "$SMPROGRAMS\${COMPANYNAME}"
-
- # Remove files
- delete $INSTDIR\parity.exe
- delete $INSTDIR\parity-evm.exe
- delete $INSTDIR\ethstore.exe
- delete $INSTDIR\ethkey.exe
- delete $INSTDIR\ptray.exe
- delete $INSTDIR\logo.ico
-
- # Always delete uninstaller as the last action
- delete $INSTDIR\uninstall.exe
-
- # Try to remove the install directory - this will only happen if it is empty
- rmDir $INSTDIR
-
- # Firewall exception rules
- SimpleFC::AdvRemoveRule "Parity incoming peers (TCP:30303)"
- SimpleFC::AdvRemoveRule "Parity outgoing peers (TCP:30303)"
- SimpleFC::AdvRemoveRule "Parity web queries (TCP:80)"
- SimpleFC::AdvRemoveRule "Parity UDP discovery (UDP:30303)"
-
- # Remove uninstaller information from the registry
- DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}"
- DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Run" "${APPNAME}"
- DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "${APPNAME}"
-sectionEnd
diff --git a/nsis/logo.ico b/nsis/logo.ico
deleted file mode 100644
index cda99eef8..000000000
Binary files a/nsis/logo.ico and /dev/null differ
diff --git a/scripts/gitlab-build.sh b/scripts/gitlab-build.sh
index 2f1b7b8d0..a06c7a34b 100755
--- a/scripts/gitlab-build.sh
+++ b/scripts/gitlab-build.sh
@@ -44,7 +44,6 @@ set_env_win () {
set RUST_BACKTRACE=1
#export RUSTFLAGS=$RUSTFLAGS
rustup default stable-x86_64-pc-windows-msvc
- echo "MsBuild.exe windows\ptray\ptray.vcxproj /p:Platform=x64 /p:Configuration=Release" > msbuild.cmd
echo "@ signtool sign /f "\%"1 /p "\%"2 /tr http://timestamp.comodoca.com /du https://parity.io "\%"3" > sign.cmd
}
build () {
@@ -166,19 +165,6 @@ make_pkg () {
sign_exe () {
./sign.cmd $keyfile $certpass "target/$PLATFORM/release/parity.exe"
}
-make_exe () {
- ./msbuild.cmd
- ./sign.cmd $keyfile $certpass windows/ptray/x64/release/ptray.exe
- cd nsis
- curl -sL --url "https://github.com/paritytech/win-build/raw/master/vc_redist.x64.exe" -o vc_redist.x64.exe
- echo "makensis.exe installer.nsi" > nsis.cmd
- ./nsis.cmd
- cd ..
- cp nsis/installer.exe "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
- ./sign.cmd $keyfile $certpass "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
- $MD5_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT -p %h > "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".md5"
- $SHA256_BIN "parity_"$VER"_"$IDENT"_"$ARC"."$EXT -p %h > "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256"
-}
push_binaries () {
echo "Push binaries to AWS S3"
aws configure set aws_access_key_id $s3_key
@@ -205,9 +191,6 @@ push_binaries () {
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/whisper$S3WIN --body target/$PLATFORM/release/whisper$S3WIN
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/whisper$S3WIN.md5 --body whisper$S3WIN.md5
aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/whisper$S3WIN.sha256 --body whisper$S3WIN.sha256
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT".md5" --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".md5"
- aws s3api put-object --bucket $S3_BUCKET --key $CI_BUILD_REF_NAME/$BUILD_PLATFORM/"parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256" --body "parity_"$VER"_"$IDENT"_"$ARC"."$EXT".sha256"
}
make_archive () {
echo "add artifacts to archive"
@@ -356,7 +339,6 @@ case $BUILD_PLATFORM in
build
sign_exe
calculate_checksums
- make_exe
make_archive
push_binaries
updater_push_release
diff --git a/windows/ptray/ptray.cpp b/windows/ptray/ptray.cpp
deleted file mode 100644
index 8701daecb..000000000
--- a/windows/ptray/ptray.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright 2015-2018 Parity Technologies (UK) Ltd.
-// This file is part of Parity.
-
-// Parity is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-
-// Parity is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License
-// along with Parity. If not, see .
-
-#define WIN32_LEAN_AND_MEAN
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#include "resource.h"
-
-#pragma comment(lib, "shlwapi.lib")
-
-#define MAX_LOADSTRING 100
-#define IDM_EXIT 100
-#define IDM_OPEN 101
-#define IDM_AUTOSTART 102
-#define WM_USER_SHELLICON WM_USER + 1
-
-HANDLE parityHandle = INVALID_HANDLE_VALUE;
-DWORD parityProcId = 0;
-NOTIFYICONDATA nidApp;
-WCHAR szTitle[MAX_LOADSTRING];
-WCHAR szWindowClass[MAX_LOADSTRING];
-LPCWCHAR commandLineFiltered = L"";
-
-LPCWSTR cParityExe = _T("parity.exe");
-
-ATOM MyRegisterClass(HINSTANCE hInstance);
-bool InitInstance(HINSTANCE, int, LPWSTR cmdLine);
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
-void KillParity();
-void OpenUI();
-bool ParityIsRunning();
-bool AutostartEnabled();
-void EnableAutostart(bool enable);
-
-bool GetParityExePath(TCHAR* dest, size_t destSize)
-{
- if (!dest || MAX_PATH > destSize)
- return false;
- GetModuleFileName(NULL, dest, (DWORD)destSize);
- if (!PathRemoveFileSpec(dest))
- return false;
- return PathAppend(dest, _T("parity.exe")) == TRUE;
-}
-
-bool GetTrayExePath(TCHAR* dest, size_t destSize)
-{
- if (!dest || MAX_PATH > destSize)
- return false;
- GetModuleFileName(NULL, dest, (DWORD)destSize);
- return true;
-}
-
-int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
- _In_opt_ HINSTANCE hPrevInstance,
- _In_ LPWSTR lpCmdLine,
- _In_ int nCmdShow)
-{
- UNREFERENCED_PARAMETER(hPrevInstance);
- UNREFERENCED_PARAMETER(lpCmdLine);
-
- CreateMutex(0, FALSE, _T("Local\\ParityTray"));
- if (GetLastError() == ERROR_ALREADY_EXISTS) {
- // open the UI
- OpenUI();
- return 0;
- }
-
- LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
- LoadStringW(hInstance, IDC_PTRAY, szWindowClass, MAX_LOADSTRING);
- MyRegisterClass(hInstance);
-
- if (!InitInstance(hInstance, nCmdShow, lpCmdLine))
- return FALSE;
-
- HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_PTRAY));
- MSG msg;
- // Main message loop:
- while (GetMessage(&msg, nullptr, 0, 0))
- {
- if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
-
- return (int)msg.wParam;
-}
-
-ATOM MyRegisterClass(HINSTANCE hInstance)
-{
- WNDCLASSEXW wcex;
-
- wcex.cbSize = sizeof(WNDCLASSEX);
-
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PTRAY));
- wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_PTRAY);
- wcex.lpszClassName = szWindowClass;
- wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
-
- return RegisterClassExW(&wcex);
-}
-
-
-bool InitInstance(HINSTANCE hInstance, int nCmdShow, LPWSTR cmdLine)
-{
- if (lstrlen(cmdLine) > 0)
- {
- int commandLineArgs = 0;
- LPWSTR* commandLine = CommandLineToArgvW(cmdLine, &commandLineArgs);
- LPWSTR filteredArgs = new WCHAR[lstrlen(cmdLine) + 2];
- filteredArgs[0] = '\0';
- for (int i = 0; i < commandLineArgs; i++)
- {
- // Remove "ui" from command line
- if (lstrcmp(commandLine[i], L"ui") != 0)
- {
- lstrcat(filteredArgs, commandLine[i]);
- lstrcat(filteredArgs, L" ");
- }
- }
- commandLineFiltered = filteredArgs;
- }
-
- // Check if already running
- PROCESSENTRY32 entry;
- entry.dwSize = sizeof(PROCESSENTRY32);
-
- HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
- if (Process32First(snapshot, &entry) == TRUE)
- {
- while (Process32Next(snapshot, &entry) == TRUE)
- {
- if (lstrcmp(entry.szExeFile, cParityExe) == 0)
- {
- parityHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID);
- parityProcId = entry.th32ProcessID;
- break;
- }
- }
- }
-
- CloseHandle(snapshot);
-
- if (parityHandle == INVALID_HANDLE_VALUE)
- {
- // Launch parity
- TCHAR path[MAX_PATH] = { 0 };
- if (!GetParityExePath(path, MAX_PATH))
- return false;
-
- PROCESS_INFORMATION procInfo = { 0 };
- STARTUPINFO startupInfo = { sizeof(STARTUPINFO) };
-
- LPWSTR cmd = new WCHAR[lstrlen(cmdLine) + lstrlen(path) + 2];
- lstrcpy(cmd, path);
- lstrcat(cmd, _T(" "));
- lstrcat(cmd, cmdLine);
- if (!CreateProcess(nullptr, cmd, nullptr, nullptr, false, CREATE_NO_WINDOW, nullptr, nullptr, &startupInfo, &procInfo))
- return false;
- delete[] cmd;
- parityHandle = procInfo.hProcess;
- parityProcId = procInfo.dwProcessId;
- }
-
- HWND hWnd = CreateWindowW(szWindowClass, szTitle, 0,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
-
- if (!hWnd)
- return false;
-
- HICON hMainIcon = LoadIcon(hInstance, (LPCTSTR)MAKEINTRESOURCE(IDI_PTRAY));
-
- nidApp.cbSize = sizeof(NOTIFYICONDATA); // sizeof the struct in bytes
- nidApp.hWnd = (HWND)hWnd; //handle of the window which will process this app. messages
- nidApp.uID = IDI_PTRAY; //ID of the icon that willl appear in the system tray
- nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //ORing of all the flags
- nidApp.hIcon = hMainIcon; // handle of the Icon to be displayed, obtained from LoadIcon
- nidApp.uCallbackMessage = WM_USER_SHELLICON;
- LoadString(hInstance, IDS_CONTROL_PARITY, nidApp.szTip, MAX_LOADSTRING);
- Shell_NotifyIcon(NIM_ADD, &nidApp);
-
- SetTimer(hWnd, 0, 1000, nullptr);
- return true;
-
-}
-
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_USER_SHELLICON:
- // systray msg callback
- POINT lpClickPoint;
- switch (LOWORD(lParam))
- {
- case WM_LBUTTONDOWN:
- OpenUI();
- break;
- case WM_RBUTTONDOWN:
- UINT uFlag = MF_BYPOSITION | MF_STRING;
- GetCursorPos(&lpClickPoint);
- HMENU hPopMenu = CreatePopupMenu();
- InsertMenu(hPopMenu, 0xFFFFFFFF, MF_BYPOSITION | MF_STRING, IDM_OPEN, _T("Open"));
- InsertMenu(hPopMenu, 0xFFFFFFFF, MF_SEPARATOR | MF_BYPOSITION, 0, nullptr);
- InsertMenu(hPopMenu, 0xFFFFFFFF, MF_BYPOSITION | MF_STRING, IDM_AUTOSTART, _T("Start at Login"));
- InsertMenu(hPopMenu, 0xFFFFFFFF, MF_SEPARATOR | MF_BYPOSITION, 0, nullptr);
- InsertMenu(hPopMenu, 0xFFFFFFFF, MF_BYPOSITION | MF_STRING, IDM_EXIT, _T("Exit"));
- bool autoStart = AutostartEnabled();
- CheckMenuItem(hPopMenu, IDM_AUTOSTART, autoStart ? MF_CHECKED : autoStart);
-
- SetForegroundWindow(hWnd);
- TrackPopupMenu(hPopMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_BOTTOMALIGN, lpClickPoint.x, lpClickPoint.y, 0, hWnd, NULL);
- return TRUE;
-
- }
- break;
- case WM_COMMAND:
- {
- int wmId = LOWORD(wParam);
- // Parse the menu selections:
- switch (wmId)
- {
- case IDM_EXIT:
- DestroyWindow(hWnd);
- break;
- case IDM_OPEN:
- OpenUI();
- break;
- case IDM_AUTOSTART:
- {
- bool autoStart = AutostartEnabled();
- EnableAutostart(!autoStart);
- }
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- }
- break;
- case WM_DESTROY:
- Shell_NotifyIcon(NIM_DELETE, &nidApp);
- KillParity();
- PostQuitMessage(0);
- break;
- case WM_TIMER:
- if (!ParityIsRunning())
- DestroyWindow(hWnd);
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
-}
-
-void KillParity()
-{
- DWORD procId = parityProcId;
- //This does not require the console window to be visible.
- if (AttachConsole(procId))
- {
- // Disable Ctrl-C handling for our program
- SetConsoleCtrlHandler(nullptr, true);
- GenerateConsoleCtrlEvent(CTRL_C_EVENT, 0);
- FreeConsole();
-
- //Re-enable Ctrl-C handling or any subsequently started
- //programs will inherit the disabled state.
- SetConsoleCtrlHandler(nullptr, false);
- }
- WaitForSingleObject(parityHandle, INFINITE);
-}
-
-bool ParityIsRunning()
-{
- return WaitForSingleObject(parityHandle, 0) == WAIT_TIMEOUT;
-}
-
-void OpenUI()
-{
- // Launch parity
- TCHAR path[MAX_PATH] = { 0 };
- if (!GetParityExePath(path, MAX_PATH))
- return;
-
- PROCESS_INFORMATION procInfo = { 0 };
- STARTUPINFO startupInfo = { sizeof(STARTUPINFO) };
-
- LPWSTR args = new WCHAR[lstrlen(commandLineFiltered) + MAX_PATH + 2];
- lstrcpy(args, L"parity.exe ");
- lstrcat(args, commandLineFiltered);
- lstrcat(args, L" ui");
- CreateProcess(path, args, nullptr, nullptr, false, CREATE_NO_WINDOW, nullptr, nullptr, &startupInfo, &procInfo);
-}
-
-bool AutostartEnabled() {
- HKEY hKey;
- LONG lRes = RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_READ, &hKey);
- if (lRes != ERROR_SUCCESS)
- return false;
-
- WCHAR szBuffer[512];
- DWORD dwBufferSize = sizeof(szBuffer);
- ULONG nError;
- nError = RegQueryValueExW(hKey, L"Parity", 0, nullptr, (LPBYTE)szBuffer, &dwBufferSize);
- if (ERROR_SUCCESS != nError)
- return false;
- return true;
-}
-
-void EnableAutostart(bool enable) {
- HKEY hKey;
- LONG lRes = RegOpenKeyExW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_WRITE, &hKey);
- if (lRes != ERROR_SUCCESS)
- return;
-
- if (enable)
- {
- LPWSTR args = new WCHAR[lstrlen(commandLineFiltered) + MAX_PATH + 2];
- if (GetTrayExePath(args, MAX_PATH))
- {
- lstrcat(args, L" ");
- lstrcat(args, commandLineFiltered);
- RegSetValueEx(hKey, L"Parity", 0, REG_SZ, (LPBYTE)args, MAX_PATH);
- }
- delete[] args;
- }
- else
- {
- RegDeleteValue(hKey, L"Parity");
- }
-}
diff --git a/windows/ptray/ptray.ico b/windows/ptray/ptray.ico
deleted file mode 100644
index cda99eef8..000000000
Binary files a/windows/ptray/ptray.ico and /dev/null differ
diff --git a/windows/ptray/ptray.rc b/windows/ptray/ptray.rc
deleted file mode 100644
index 9f10e0aa8..000000000
Binary files a/windows/ptray/ptray.rc and /dev/null differ
diff --git a/windows/ptray/ptray.vcxproj b/windows/ptray/ptray.vcxproj
deleted file mode 100644
index e015d55c1..000000000
--- a/windows/ptray/ptray.vcxproj
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
- Debug
- Win32
-
-
- Release
- Win32
-
-
- Debug
- x64
-
-
- Release
- x64
-
-
-
- {37C89E90-8C9E-4FFC-AAE7-B3695D5EB6F4}
- Win32Proj
- ptray
- 8.1
-
-
-
- Application
- true
- v140
- Unicode
-
-
- Application
- false
- v140
- true
- Unicode
-
-
- Application
- true
- v140
- Unicode
-
-
- Application
- false
- v140
- true
- Unicode
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
- true
-
-
- false
-
-
- false
-
-
-
- NotUsing
- Level3
- Disabled
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
-
-
- Windows
- true
-
-
-
-
- NotUsing
- Level3
- Disabled
- _DEBUG;_WINDOWS;%(PreprocessorDefinitions)
-
-
- Windows
- true
-
-
-
-
- Level3
- NotUsing
- MaxSpeed
- true
- true
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
-
-
- Windows
- true
- true
- true
-
-
-
-
- Level3
- NotUsing
- MaxSpeed
- true
- true
- NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
-
-
- Windows
- true
- true
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/windows/ptray/resource.h b/windows/ptray/resource.h
deleted file mode 100644
index 1f4b02343..000000000
Binary files a/windows/ptray/resource.h and /dev/null differ
diff --git a/windows/ptray/targetver.h b/windows/ptray/targetver.h
deleted file mode 100644
index 87c0086de..000000000
--- a/windows/ptray/targetver.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-// Including SDKDDKVer.h defines the highest available Windows platform.
-
-// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
-// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
-
-#include