{"action":"created","issue":{"url":"https://api.github.com/repos/EmmittJ/PoESkillTree/issues/141","labels_url":"https://api.github.com/repos/EmmittJ/PoESkillTree/issues/141/labels{/name}","comments_url":"https://api.github.com/repos/EmmittJ/PoESkillTree/issues/141/comments","events_url":"https://api.github.com/repos/EmmittJ/PoESkillTree/issues/141/events","html_url":"https://github.com/EmmittJ/PoESkillTree/pull/141","id":90021736,"number":141,"title":"Setup wizard  based installation/updating","user":{"login":"l0g0sys","id":8587407,"avatar_url":"https://avatars.githubusercontent.com/u/8587407?v=3","gravatar_id":"","url":"https://api.github.com/users/l0g0sys","html_url":"https://github.com/l0g0sys","followers_url":"https://api.github.com/users/l0g0sys/followers","following_url":"https://api.github.com/users/l0g0sys/following{/other_user}","gists_url":"https://api.github.com/users/l0g0sys/gists{/gist_id}","starred_url":"https://api.github.com/users/l0g0sys/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/l0g0sys/subscriptions","organizations_url":"https://api.github.com/users/l0g0sys/orgs","repos_url":"https://api.github.com/users/l0g0sys/repos","events_url":"https://api.github.com/users/l0g0sys/events{/privacy}","received_events_url":"https://api.github.com/users/l0g0sys/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":13,"created_at":"2015-06-22T06:14:10Z","updated_at":"2015-06-23T14:15:16Z","closed_at":"2015-06-23T11:19:58Z","pull_request":{"url":"https://api.github.com/repos/EmmittJ/PoESkillTree/pulls/141","html_url":"https://github.com/EmmittJ/PoESkillTree/pull/141","diff_url":"https://github.com/EmmittJ/PoESkillTree/pull/141.diff","patch_url":"https://github.com/EmmittJ/PoESkillTree/pull/141.patch"},"body":"I'm done with installer stuff too. Here are some notable changes.\r\n\r\n## New features ##\r\n  - dist-release.bat script now creates .exe package with setup wizard.\r\n  - All required files to create setup wizard are in Tools\\isetup folder. No need to install anything to make release.\r\n  - Version.resx contains new strings which allows to make release without having to deal with Inno Setup script (release.iss).\r\n  - Setup wizard asks for language to use during setup. Default Inno Setup language files have to be used (located in Tools\\isetup\\Languages), so those have to be managed separately from our localization.\r\n  - Setup wizard displays LICENSE.txt file and asks for license acceptation before setup continues.\r\n  - Setup wizard offers installation to Program Files by default, creates Start Menu (with uninstall link) and optional Desktop shortcut.\r\n  - Setup wizard creates empty PeristentData file with language option set to chosen language during setup. This empty file is created by CreateSetupTemplate method in PersistenData class.\r\n  - Setup wizard checks for running instance(s) of application and asks user to close this instance(s) before setup continues.\r\n  - Setup wizard allows to install release alongside of older installed release based on Version.resx strings. AppId and ProductName strings have to be changed to achieve this.\r\n\r\n## Changes ##\r\n  - Removed shadow copying together with custom Taskbar pinning. Regular OS pinning will be used.\r\n  - Application program files (executables and DLLs) are installed where selected during setup.\r\n  - Application data (Data, Locale folders, Items.xml, PersistenData.xml files) are installed into roaming user profile (e.g. C:\\Users\\username\\AppData\\Roaming\\PoESkillTree).\r\n  - All application code accessing application data must use Utils.AppData API class.\r\n\r\n## Game patch compatibility issues ##\r\n\r\nAs we know, at some point, it will be important to create release which must be installed alongside previous release.\r\nThus, allowing people to still use old release supporting 1.3 tree and calculations, together with new release supporting 2.0 tree and new calculations.\r\nTo manage compatibility of new release vs. installed release, 2 new Version.resx strings are used:\r\n  - AppId: The application identifier is unique string which identifies application within Uninstall registry.\r\n\t\t   Thus, release with **same AppId** as existing installed release is treated as **update of already installed release** and doesn't create new Uninstall entry.\r\n\t\t   Changing this AppId will force setup to create new Uninstall entry during setup and treat installation as separate application.\r\n           This string is also used as AppUserModelId to distinguish windows of application for purpose of grouping them on Taskbar.\r\n  - ProductName: The ProductName is used to distinguish application release with friendly name.\r\n                 The ProductName is offered as default folder name to be created in Program Files folder thus separating binary files from previous release.\r\n\t\t\t\t Also it is used as Start Menu group name and Desktop shortcut name created during setup.\r\n\t\t\t\t Finally, it is also used as name of folder within roaming profile to separate application data from previous release.\r\n\r\nSo, if current AppId is \"{8B7A6A22-B6BB-40BB-856E-E0D1BB66DFB2}\" and ProductName is \"PoESkillTree\" for PoE 1.3 compatible release.\r\nThe release compatible with PoE 2.0 will have new AppId generated and ProductName changed to \"PoESkillTree 2\" for example.\r\nThis will allow people to have \"PoESkillTree\" and \"PoESkillTree 2\" products installed at same time. Each with own application data, program files and Taskbar window grouping.\r\nAll further releases since then (when only ProductVersion is changed) will update only \"PoESkillTree 2\" application, until AppId and ProductName is changed again.\r\n\r\n## Check for updates ##\r\n\r\n  - New flag IsUpdate was added to Updater.Release class to indicate that release found on GitHub is an update of running installed application.\r\n  - When installing an update, application will exit and run setup wizard in silent mode (no questions asked). Once update process finishes, the application will be launched automatically.\r\n  - When installing a new product, setup wizard will be run in non-silent regular mode.\r\n"},"comment":{"url":"https://api.github.com/repos/EmmittJ/PoESkillTree/issues/comments/114519651","html_url":"https://github.com/EmmittJ/PoESkillTree/pull/141#issuecomment-114519651","issue_url":"https://api.github.com/repos/EmmittJ/PoESkillTree/issues/141","id":114519651,"user":{"login":"SpaceOgre","id":381657,"avatar_url":"https://avatars.githubusercontent.com/u/381657?v=3","gravatar_id":"","url":"https://api.github.com/users/SpaceOgre","html_url":"https://github.com/SpaceOgre","followers_url":"https://api.github.com/users/SpaceOgre/followers","following_url":"https://api.github.com/users/SpaceOgre/following{/other_user}","gists_url":"https://api.github.com/users/SpaceOgre/gists{/gist_id}","starred_url":"https://api.github.com/users/SpaceOgre/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SpaceOgre/subscriptions","organizations_url":"https://api.github.com/users/SpaceOgre/orgs","repos_url":"https://api.github.com/users/SpaceOgre/repos","events_url":"https://api.github.com/users/SpaceOgre/events{/privacy}","received_events_url":"https://api.github.com/users/SpaceOgre/received_events","type":"User","site_admin":false},"created_at":"2015-06-23T14:15:15Z","updated_at":"2015-06-23T14:15:15Z","body":"The updated wiki looks fine to me, easy to understand. "}}