From 0cc05617d17947d139d09f4ddcca7aeca755f00a Mon Sep 17 00:00:00 2001 From: sirius-m Date: Sun, 4 Oct 2009 11:38:29 +0000 Subject: [PATCH] Fixed the installer script and made the autostart registry based. git-svn-id: https://bitcoin.svn.sourceforge.net/svnroot/bitcoin/trunk@14 1a98c847-1fd6-4fd8-948a-caf3550aa51b --- changelog.txt | 5 ++-- headers.h | 1 - setup.nsi | 43 +++++++++++++++------------- ui.cpp | 77 ++++++++++++++++++++++----------------------------- uibase.cpp | 2 +- uiproject.fbp | 6 ++-- 6 files changed, 63 insertions(+), 71 deletions(-) diff --git a/changelog.txt b/changelog.txt index fee4f6618..d2380b8a0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -2,5 +2,6 @@ Changes after 0.1.5: -------------------- + Options dialog layout changed - added the UI options panel + Minimize to tray feature -+ Startup on system boot feature (adds a shortcut to the Startup folder) -+ Ask before closing \ No newline at end of file ++ Startup on system boot feature ++ Ask before closing ++ NSIS installer \ No newline at end of file diff --git a/headers.h b/headers.h index 92911505b..d0393c546 100644 --- a/headers.h +++ b/headers.h @@ -37,7 +37,6 @@ #include #include #include -#include #include #define BOUNDSCHECK 1 #include diff --git a/setup.nsi b/setup.nsi index f49fe310d..56a46ea3e 100644 --- a/setup.nsi +++ b/setup.nsi @@ -53,7 +53,7 @@ VIAddVersionKey CompanyWebsite "${URL}" VIAddVersionKey FileVersion "${VERSION}" VIAddVersionKey FileDescription "" VIAddVersionKey LegalCopyright "" -InstallDirRegKey HKLM "${REGKEY}" Path +InstallDirRegKey HKCU "${REGKEY}" Path ShowUninstDetails show # Installer sections @@ -63,32 +63,33 @@ Section -Main SEC0000 File bitcoin.exe File libeay32.dll File mingwm10.dll - WriteRegStr HKLM "${REGKEY}\Components" Main 1 + WriteRegStr HKCU "${REGKEY}\Components" Main 1 + WriteRegStr HKCU SOFTWARE\Microsoft\Windows\CurrentVersion\Run Bitcoin "$INSTDIR\bitcoin.exe /min" SectionEnd Section -post SEC0001 - WriteRegStr HKLM "${REGKEY}" Path $INSTDIR + WriteRegStr HKCU "${REGKEY}" Path $INSTDIR SetOutPath $INSTDIR WriteUninstaller $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_BEGIN Application - SetOutPath $SMPROGRAMS\$StartMenuGroup + CreateDirectory $SMPROGRAMS\$StartMenuGroup CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" $INSTDIR\bitcoin.exe CreateShortcut "$SMPROGRAMS\$StartMenuGroup\Uninstall Bitcoin.lnk" $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_END - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe - WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe - WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 - WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe + WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe + WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 + WriteRegDWORD HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 SectionEnd # Macro for selecting uninstaller sections !macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID Push $R0 - ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}" + ReadRegStr $R0 HKCU "${REGKEY}\Components" "${SECTION_NAME}" StrCmp $R0 1 0 next${UNSECTION_ID} !insertmacro SelectSection "${UNSECTION_ID}" GoTo done${UNSECTION_ID} @@ -103,18 +104,20 @@ Section /o -un.Main UNSEC0000 Delete /REBOOTOK $INSTDIR\mingwm10.dll Delete /REBOOTOK $INSTDIR\libeay32.dll Delete /REBOOTOK $INSTDIR\bitcoin.exe - DeleteRegValue HKLM "${REGKEY}\Components" Main + DeleteRegValue HKCU "${REGKEY}\Components" Main + DeleteRegValue HKCU SOFTWARE\Microsoft\Windows\CurrentVersion\Run Bitcoin SectionEnd Section -un.post UNSEC0001 - DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" + DeleteRegKey HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Uninstall Bitcoin.lnk" Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\Bitcoin.lnk" Delete /REBOOTOK $INSTDIR\uninstall.exe - DeleteRegValue HKLM "${REGKEY}" StartMenuGroup - DeleteRegValue HKLM "${REGKEY}" Path - DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components" - DeleteRegKey /IfEmpty HKLM "${REGKEY}" + Delete /REBOOTOK $INSTDIR\db.log + DeleteRegValue HKCU "${REGKEY}" StartMenuGroup + DeleteRegValue HKCU "${REGKEY}" Path + DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components" + DeleteRegKey /IfEmpty HKCU "${REGKEY}" RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup RmDir /REBOOTOK $INSTDIR Push $R0 @@ -131,7 +134,7 @@ FunctionEnd # Uninstaller functions Function un.onInit - ReadRegStr $INSTDIR HKLM "${REGKEY}" Path + ReadRegStr $INSTDIR HKCU "${REGKEY}" Path !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuGroup !insertmacro SELECT_UNSECTION Main ${UNSEC0000} FunctionEnd diff --git a/ui.cpp b/ui.cpp index e7be55da3..a1e582ab9 100644 --- a/ui.cpp +++ b/ui.cpp @@ -3016,8 +3016,9 @@ void CBitcoinTBIcon::UpdateTooltip() { wxMenu *CBitcoinTBIcon::CreatePopupMenu() { wxMenu *menu = new wxMenu; - wxMenuItem* generateCheck = menu->AppendCheckItem(PU_GENERATE, _T("Generate Coins")); menu->Append(PU_RESTORE, _T("Open Bitcoin")); + wxMenuItem* generateCheck = menu->AppendCheckItem(PU_GENERATE, _T("Generate Coins")); + menu->InsertSeparator(2); menu->Append(PU_EXIT, _T("Exit")); generateCheck->Check(fGenerateBitcoins); @@ -3386,51 +3387,39 @@ void ApplyUISettings() { taskBarIcon->Hide(); // Autostart on system startup? - // Get the startup folder shortcut path - char linkPath[ MAX_PATH ]; - SHGetSpecialFolderPath(0, linkPath, CSIDL_STARTUP, 0); - strcat(linkPath, "\\Bitcoin.lnk"); - - // If the shortcut exists already, remove it for updating - remove(linkPath); - - if (startOnSysBoot) { - CoInitialize(NULL); - // Get the current executable path - char exePath[ MAX_PATH ]; - GetModuleFileName(NULL, exePath, _MAX_PATH + 1); - - HRESULT hres = NULL; - IShellLink* psl = NULL; - // Get a pointer to the IShellLink interface. - hres = CoCreateInstance(CLSID_ShellLink, NULL, - CLSCTX_INPROC_SERVER, IID_IShellLink, - reinterpret_cast(&psl)); - - if (SUCCEEDED(hres)) - { - IPersistFile* ppf = NULL; - // Set the path to the shortcut target - psl->SetPath(exePath); - psl->SetArguments("/min"); - // Query IShellLink for the IPersistFile interface for - // saving the shortcut in persistent storage. - hres = psl->QueryInterface(IID_IPersistFile, - reinterpret_cast(&ppf)); - if (SUCCEEDED(hres)) - { - WCHAR wsz[MAX_PATH]; - // Ensure that the string is ANSI. - MultiByteToWideChar(CP_ACP, 0, linkPath, -1, - wsz, MAX_PATH); - // Save the link by calling IPersistFile::Save. - hres = ppf->Save(wsz, TRUE); - ppf->Release(); - } - psl->Release(); + // Open the startup registry key + HKEY hKey; + LONG lnRes = RegOpenKeyEx( + HKEY_CURRENT_USER, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", + 0, + KEY_ALL_ACCESS, + &hKey + ); + + if ( ERROR_SUCCESS == lnRes ) + { + if (startOnSysBoot) { + // Get the current executable path + char exePath[ MAX_PATH ]; + GetModuleFileName(NULL, exePath, _MAX_PATH + 1); + char runCmd[ MAX_PATH + 5 ]; + strcat(runCmd, exePath); + strcat(runCmd," /min"); + + RegSetValueEx(hKey, + "Bitcoin", + 0, + REG_SZ, + (BYTE*)runCmd, + sizeof(runCmd) + ); + } + else { + RegDeleteValue(hKey, "Bitcoin"); } - CoUninitialize(); } + RegCloseKey(hKey); } diff --git a/uibase.cpp b/uibase.cpp index dcaa69758..a88c67ebf 100644 --- a/uibase.cpp +++ b/uibase.cpp @@ -1870,7 +1870,7 @@ COptionsPanelUIBase::COptionsPanelUIBase( wxWindow* parent, wxWindowID id, const bSizer57->Add( m_checkCloseToTray, 0, wxALL, 5 ); - m_checkStartOnSysBoot = new wxCheckBox( this, wxID_ANY, wxT("Start on system boot"), wxDefaultPosition, wxDefaultSize, 0 ); + m_checkStartOnSysBoot = new wxCheckBox( this, wxID_ANY, wxT("Start with Windows"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer57->Add( m_checkStartOnSysBoot, 0, wxALL, 5 ); diff --git a/uiproject.fbp b/uiproject.fbp index ccd8b2222..315cc725a 100644 --- a/uiproject.fbp +++ b/uiproject.fbp @@ -11849,7 +11849,7 @@ - + 1 @@ -12076,7 +12076,7 @@ - + 1 @@ -12250,7 +12250,7 @@ 0 wxID_ANY - Start on system boot + Start with Windows m_checkStartOnSysBoot