From e28dbb53ad61f44a4c69bf614ec3e9e46a4c9340 Mon Sep 17 00:00:00 2001 From: Alexis Campailla Date: Mon, 4 May 2015 18:40:34 +0200 Subject: [PATCH] Move MSI to a separate solution Move MSI to a separate solution, so that builing RedisServer.sln doesn't require having the Wix Toolset installed. --- Redis on Windows Release Notes.md | 7 ++- Redis on Windows.md | 1 - Windows Service Documentation.md | 25 ++++++++- msvs/RedisServer.sln | 24 --------- .../RedisMsi.CustomActions.csproj | 7 ++- msvs/msi/RedisMsi.sln | 48 ++++++++++++++++++ .../Components/DocumentationComponents.wxs | 3 ++ .../RedisMsi/Components/FileComponents.wxs | 11 ++-- .../Components/WindowsServiceComponents.wxs | 8 ++- msvs/msi/RedisMsi/Product.wxs | 1 + msvs/msi/RedisMsi/RedisMsi.wixproj | 40 --------------- .../Redis on Windows Release Notes.docx | Bin 15228 -> 13549 bytes 12 files changed, 97 insertions(+), 78 deletions(-) create mode 100644 msvs/msi/RedisMsi.sln diff --git a/Redis on Windows Release Notes.md b/Redis on Windows Release Notes.md index 26daeab4..a97a2397 100644 --- a/Redis on Windows Release Notes.md +++ b/Redis on Windows Release Notes.md @@ -1,4 +1,4 @@ -MSOpenTech Redis 2.8.17 Release Notes +MSOpenTech Redis 2.8.19 Release Notes ===================================== Welcome to the binary release of Redis from Microsoft Open Technologies, Inc. @@ -13,10 +13,10 @@ Porting Goals Our goal is to provide a version of Redis that runs on Windows with a performance essentially equal to the performance of Redis on an equivalent UNIX machine. -What is new with the 2.8.17 release +What is new with the 2.8.19 release ----------------------------------- -Our last official release was 2.8.12. We have merged in the changes up to 2.8.17. Please see the [release notes for the UNIX 2.8 branch](http://download.redis.io/redis-stable/00-RELEASENOTES) to understand how this impacts Redis functionality. +Our last official release was 2.8.12. We have merged in the changes up to 2.8.19. Please see the [release notes for the UNIX 2.8 branch](http://download.redis.io/redis-stable/00-RELEASENOTES) to understand how this impacts Redis functionality. ### Network layer changes @@ -32,4 +32,3 @@ How to develop for Redis ------------------------ You will need a client library for accessing Redis. There are a wide variety of client libraries available as listed at . - diff --git a/Redis on Windows.md b/Redis on Windows.md index fe6fa25e..fc528378 100644 --- a/Redis on Windows.md +++ b/Redis on Windows.md @@ -105,4 +105,3 @@ Service Account --------------- When using Redis as a Windows service, the default installation configures Redis to run under the system’s NETWORK SERVICE account. There are some environments where another account must be used (perhaps a domain service account). Configuration of this account needs to be done manually at this point with the service control manager. If this is done, it is also important to give read/write/create permission to the folder that the Redis executable is in to this user identity. - diff --git a/Windows Service Documentation.md b/Windows Service Documentation.md index 0d4ab0a4..1abf4c3d 100644 --- a/Windows Service Documentation.md +++ b/Windows Service Documentation.md @@ -1,6 +1,28 @@ -Running Redis as a Service +Running Redis as a Service ========================== +If you installed Redis using the MSI package, then Redis was already installed as a Windows service. Nothing further to do. If you would like to change its settings, you can update the *redis.windows.conf* file and then restart the Redis service (Run -\> services.msc -\> Redis -\> Restart). + +During installation of the MSI you can either use the installer’s user interface to update the port that Redis listens at and the firewall exception or run it silently without a UI. The following examples show how to install from the command line: + +**default install (port 6379 and firewall exception ON):** + +*msiexec /i Redis-x64.msi * + +**set port and turn OFF firewall exception:** + +*msiexec /i Redis-x64.msi PORT=1234 FIREWALL\_ON=""* + +**set port and turn ON firewall exception:** + +*msiexec /i Redis-x64.msi PORT=1234 FIREWALL\_ON=1* + +**install with no user interface:** + +*msiexec /quiet /i Redis-x64.msi* + +If you did *not* install Redis using the MSI package, then you still run Redis as a Windows service by following these instructions: + In order to better integrate with the Windows Services model, new command line arguments have been introduced to Redis. These service arguments require an elevated user context in order to connect to the service control manager. If these commands are invoked from a non-elevated context, Redis will attempt to create an elevated context in which to execute these commands. This will cause a User Account Control dialog to be displayed by Windows and may require Administrative user credentials in order to proceed. Installing the Service @@ -71,4 +93,3 @@ redis-server --service-start –service-name redisService2 redis-server --service-install –service-name redisService3 –port 10003 redis-server --service-start –service-name redisService3 - diff --git a/msvs/RedisServer.sln b/msvs/RedisServer.sln index 4587a0b3..9f278945 100644 --- a/msvs/RedisServer.sln +++ b/msvs/RedisServer.sln @@ -42,10 +42,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReleasePackagingTool", "Rel {A65C2CD6-72A3-441A-AEA3-D754BEA9A86A} = {A65C2CD6-72A3-441A-AEA3-D754BEA9A86A} EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisMsi.CustomActions", "msi\RedisMsi.CustomActions\RedisMsi.CustomActions.csproj", "{A917027E-D229-46C9-B969-1F4CE7D5D2CA}" -EndProject -Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "RedisMsi", "msi\RedisMsi\RedisMsi.wixproj", "{C829D256-16B4-4DC7-9BF9-6814F76B441E}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Mixed Platforms = Debug|Mixed Platforms @@ -196,26 +192,6 @@ Global {74A69E5D-6540-43CC-9975-20989BF19EB0}.Release|x64.ActiveCfg = Release|x64 {74A69E5D-6540-43CC-9975-20989BF19EB0}.Release|x64.Build.0 = Release|x64 {74A69E5D-6540-43CC-9975-20989BF19EB0}.Release|x86.ActiveCfg = Release|x64 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|Win32.ActiveCfg = Debug|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|x64.ActiveCfg = Debug|x64 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|x86.ActiveCfg = Debug|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|Mixed Platforms.Build.0 = Release|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|Win32.ActiveCfg = Release|x86 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|x64.ActiveCfg = Release|x64 - {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|x86.ActiveCfg = Release|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|Mixed Platforms.Build.0 = Debug|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|Win32.ActiveCfg = Debug|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|x64.ActiveCfg = Debug|x64 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|x86.ActiveCfg = Debug|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|Mixed Platforms.ActiveCfg = Release|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|Mixed Platforms.Build.0 = Release|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|Win32.ActiveCfg = Release|x86 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|x64.ActiveCfg = Release|x64 - {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|x86.ActiveCfg = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/msvs/msi/RedisMsi.CustomActions/RedisMsi.CustomActions.csproj b/msvs/msi/RedisMsi.CustomActions/RedisMsi.CustomActions.csproj index 43f52c38..e39e1426 100644 --- a/msvs/msi/RedisMsi.CustomActions/RedisMsi.CustomActions.csproj +++ b/msvs/msi/RedisMsi.CustomActions/RedisMsi.CustomActions.csproj @@ -10,9 +10,10 @@ Properties RedisMsi.CustomActions RedisMsi.CustomActions - v2.0 + v4.5 512 $(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.CA.targets + true @@ -22,6 +23,7 @@ DEBUG;TRACE prompt 4 + false pdbonly @@ -30,6 +32,7 @@ TRACE prompt 4 + false true @@ -39,6 +42,7 @@ x64 prompt MinimumRecommendedRules.ruleset + false bin\x64\Release\ @@ -48,6 +52,7 @@ x64 prompt MinimumRecommendedRules.ruleset + false diff --git a/msvs/msi/RedisMsi.sln b/msvs/msi/RedisMsi.sln new file mode 100644 index 00000000..363ab385 --- /dev/null +++ b/msvs/msi/RedisMsi.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "RedisMsi", "RedisMsi\RedisMsi.wixproj", "{C829D256-16B4-4DC7-9BF9-6814F76B441E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RedisMsi.CustomActions", "RedisMsi.CustomActions\RedisMsi.CustomActions.csproj", "{A917027E-D229-46C9-B969-1F4CE7D5D2CA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|Win32.ActiveCfg = Debug|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|Win32.Build.0 = Debug|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|x64.ActiveCfg = Debug|x64 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|x64.Build.0 = Debug|x64 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|x86.ActiveCfg = Debug|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Debug|x86.Build.0 = Debug|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|Win32.ActiveCfg = Release|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|Win32.Build.0 = Release|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|x64.ActiveCfg = Release|x64 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|x64.Build.0 = Release|x64 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|x86.ActiveCfg = Release|x86 + {C829D256-16B4-4DC7-9BF9-6814F76B441E}.Release|x86.Build.0 = Release|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|Win32.ActiveCfg = Debug|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|Win32.Build.0 = Debug|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|x64.ActiveCfg = Debug|x64 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|x64.Build.0 = Debug|x64 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|x86.ActiveCfg = Debug|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Debug|x86.Build.0 = Debug|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|Win32.ActiveCfg = Release|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|Win32.Build.0 = Release|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|x64.ActiveCfg = Release|x64 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|x64.Build.0 = Release|x64 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|x86.ActiveCfg = Release|x86 + {A917027E-D229-46C9-B969-1F4CE7D5D2CA}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/msvs/msi/RedisMsi/Components/DocumentationComponents.wxs b/msvs/msi/RedisMsi/Components/DocumentationComponents.wxs index 17776982..432503d8 100644 --- a/msvs/msi/RedisMsi/Components/DocumentationComponents.wxs +++ b/msvs/msi/RedisMsi/Components/DocumentationComponents.wxs @@ -1,5 +1,8 @@ + + + diff --git a/msvs/msi/RedisMsi/Components/FileComponents.wxs b/msvs/msi/RedisMsi/Components/FileComponents.wxs index 24690775..bd2ff2d0 100644 --- a/msvs/msi/RedisMsi/Components/FileComponents.wxs +++ b/msvs/msi/RedisMsi/Components/FileComponents.wxs @@ -1,23 +1,26 @@ + + + - + - + - + - + diff --git a/msvs/msi/RedisMsi/Components/WindowsServiceComponents.wxs b/msvs/msi/RedisMsi/Components/WindowsServiceComponents.wxs index 55cb5017..df936424 100644 --- a/msvs/msi/RedisMsi/Components/WindowsServiceComponents.wxs +++ b/msvs/msi/RedisMsi/Components/WindowsServiceComponents.wxs @@ -2,6 +2,10 @@ + + + + @@ -11,7 +15,7 @@ The following component installs Redis as a Windows service. --> - + - + + - - RedisBenchmark - {b00d4bb5-44de-405e-839c-d16f547006cf} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - RedisCheckAof - {a65c2cd6-72a3-441a-aea3-d754bea9a86a} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - RedisCheckDump - {52193a97-d010-41d6-bf2b-33e8e764e308} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - RedisCli - {392bbb91-3934-4a56-af42-65c5728311e8} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - - - RedisServer - {46842776-68a5-ec98-6a09-1859bbfc73aa} - True - True - Binaries;Content;Satellites - INSTALLFOLDER - RedisMsi.CustomActions {a917027e-d229-46c9-b969-1f4ce7d5d2ca} diff --git a/msvs/setups/documentation/Redis on Windows Release Notes.docx b/msvs/setups/documentation/Redis on Windows Release Notes.docx index 149a93cf7b7d3fa2752bf497205c08b36baa5e17..b5c28b09a9940d78f9deeb2fd30b9321c370e279 100644 GIT binary patch literal 13549 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 literal 15228 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