├── .gitattributes ├── .gitignore ├── LeadingCode.RedisPack.Installer.sln ├── LeadingCode.RedisPack.Installer └── LeadingCode.RedisPack.Installer.vdproj ├── LeadingCode.RedisPack.sln ├── README.md ├── README_EN.md ├── attrs ├── LeadingCode.RedisPack.Installer.msi ├── redis-6.2.9.7z ├── redis-7.0.0.7z ├── redis-7.0.1.7z ├── redis-7.0.10.7z ├── redis-7.0.11.7z ├── redis-7.0.2.7z ├── redis-7.0.3.7z ├── redis-7.0.4.7z ├── redis-7.0.5.7z ├── redis-7.0.6.7z ├── redis-7.0.7.7z ├── redis-7.0.8.7z ├── redis-7.0.9.7z ├── redis-7.2-rc.7z └── setup.exe ├── common.props ├── doc ├── 1.png ├── 2.png ├── 3.png ├── 4.png └── 5.png └── src └── LeadingCode.RedisPack ├── Apis └── IGithubRedisApi.cs ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── Assets ├── applicationIcon-1024.png ├── applicationIcon-256.png ├── dlinfo.png ├── files-1.png ├── files.png ├── install-2-path.png ├── install-3-finish.png ├── install-4-cmd.png ├── make.png └── msyscd.png ├── Converters └── BoolToVisibilityConverter.cs ├── Helpers ├── EnumToBooleanConverter.cs ├── PathExtension.cs └── ServiceCollectionExtensions.cs ├── LeadingCode.RedisPack.csproj ├── Models ├── DataColor.cs ├── GenerateState.cs ├── MsysConfig.cs └── RedisReleaseInfo.cs ├── RedisPackModule.cs ├── Services ├── ApplicationHostService.cs ├── IWritableOptions.cs ├── PageService.cs └── WritableOptions.cs ├── ViewModels ├── DashboardViewModel.cs ├── GenerateViewModel.cs ├── MainWindowViewModel.cs ├── RedisReleaseViewModel.cs └── SettingsViewModel.cs ├── Views ├── MainWindow.xaml ├── MainWindow.xaml.cs └── Pages │ ├── DashboardPage.xaml │ ├── DashboardPage.xaml.cs │ ├── GeneratePage.xaml │ ├── GeneratePage.xaml.cs │ ├── RedisReleasePage.xaml │ ├── RedisReleasePage.xaml.cs │ ├── SettingsPage.xaml │ └── SettingsPage.xaml.cs ├── appsettings.json ├── appsettings.secrets.json ├── dlfcn.h └── logo.ico /.gitattributes: -------------------------------------------------------------------------------- 1 | **/wwwroot/libs/** linguist-vendored 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | [Ll]og/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | *.VC.VC.opendb 85 | 86 | # Visual Studio profiler 87 | *.psess 88 | *.vsp 89 | *.vspx 90 | *.sap 91 | 92 | # TFS 2012 Local Workspace 93 | $tf/ 94 | 95 | # Guidance Automation Toolkit 96 | *.gpState 97 | 98 | # ReSharper is a .NET coding add-in 99 | _ReSharper*/ 100 | *.[Rr]e[Ss]harper 101 | *.DotSettings.user 102 | 103 | # JustCode is a .NET coding add-in 104 | .JustCode 105 | 106 | # TeamCity is a build add-in 107 | _TeamCity* 108 | 109 | # DotCover is a Code Coverage Tool 110 | *.dotCover 111 | 112 | # NCrunch 113 | _NCrunch_* 114 | .*crunch*.local.xml 115 | nCrunchTemp_* 116 | 117 | # MightyMoose 118 | *.mm.* 119 | AutoTest.Net/ 120 | 121 | # Web workbench (sass) 122 | .sass-cache/ 123 | 124 | # Installshield output folder 125 | [Ee]xpress/ 126 | 127 | # DocProject is a documentation generator add-in 128 | DocProject/buildhelp/ 129 | DocProject/Help/*.HxT 130 | DocProject/Help/*.HxC 131 | DocProject/Help/*.hhc 132 | DocProject/Help/*.hhk 133 | DocProject/Help/*.hhp 134 | DocProject/Help/Html2 135 | DocProject/Help/html 136 | 137 | # Click-Once directory 138 | publish/ 139 | 140 | # Publish Web Output 141 | *.[Pp]ublish.xml 142 | *.azurePubxml 143 | # TODO: Comment the next line if you want to checkin your web deploy settings 144 | # but database connection strings (with potential passwords) will be unencrypted 145 | *.pubxml 146 | *.publishproj 147 | 148 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 149 | # checkin your Azure Web App publish settings, but sensitive information contained 150 | # in these scripts will be unencrypted 151 | PublishScripts/ 152 | 153 | # NuGet Packages 154 | *.nupkg 155 | # The packages folder can be ignored because of Package Restore 156 | **/packages/* 157 | # except build/, which is used as an MSBuild target. 158 | !**/packages/build/ 159 | # Uncomment if necessary however generally it will be regenerated when needed 160 | #!**/packages/repositories.config 161 | # NuGet v3's project.json files produces more ignoreable files 162 | *.nuget.props 163 | *.nuget.targets 164 | 165 | # Microsoft Azure Build Output 166 | csx/ 167 | *.build.csdef 168 | 169 | # Microsoft Azure Emulator 170 | ecf/ 171 | rcf/ 172 | 173 | # Windows Store app package directories and files 174 | AppPackages/ 175 | BundleArtifacts/ 176 | Package.StoreAssociation.xml 177 | _pkginfo.txt 178 | 179 | # Visual Studio cache files 180 | # files ending in .cache can be ignored 181 | *.[Cc]ache 182 | # but keep track of directories ending in .cache 183 | !*.[Cc]ache/ 184 | 185 | # Others 186 | ClientBin/ 187 | ~$* 188 | *~ 189 | *.dbmdl 190 | *.dbproj.schemaview 191 | *.pfx 192 | *.publishsettings 193 | node_modules/ 194 | orleans.codegen.cs 195 | 196 | # Since there are multiple workflows, uncomment next line to ignore bower_components 197 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 198 | #bower_components/ 199 | 200 | # RIA/Silverlight projects 201 | Generated_Code/ 202 | 203 | # Backup & report files from converting an old project file 204 | # to a newer Visual Studio version. Backup files are not needed, 205 | # because we have git ;-) 206 | _UpgradeReport_Files/ 207 | Backup*/ 208 | UpgradeLog*.XML 209 | UpgradeLog*.htm 210 | 211 | # SQL Server files 212 | *.mdf 213 | *.ldf 214 | 215 | # Business Intelligence projects 216 | *.rdl.data 217 | *.bim.layout 218 | *.bim_*.settings 219 | 220 | # Microsoft Fakes 221 | FakesAssemblies/ 222 | 223 | # GhostDoc plugin setting file 224 | *.GhostDoc.xml 225 | 226 | # Node.js Tools for Visual Studio 227 | .ntvs_analysis.dat 228 | 229 | # Visual Studio 6 build log 230 | *.plg 231 | 232 | # Visual Studio 6 workspace options file 233 | *.opt 234 | 235 | # Visual Studio LightSwitch build output 236 | **/*.HTMLClient/GeneratedArtifacts 237 | **/*.DesktopClient/GeneratedArtifacts 238 | **/*.DesktopClient/ModelManifest.xml 239 | **/*.Server/GeneratedArtifacts 240 | **/*.Server/ModelManifest.xml 241 | _Pvt_Extensions 242 | 243 | # Paket dependency manager 244 | .paket/paket.exe 245 | paket-files/ 246 | 247 | # FAKE - F# Make 248 | .fake/ 249 | 250 | # JetBrains Rider 251 | .idea/ 252 | *.sln.iml 253 | 254 | # RedisPack 255 | src/LeadingCode.RedisPack.ConsoleApp/Logs/logs.txt 256 | -------------------------------------------------------------------------------- /LeadingCode.RedisPack.Installer.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.5.33530.505 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LeadingCode.RedisPack", "src\LeadingCode.RedisPack\LeadingCode.RedisPack.csproj", "{7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{25D4C66E-2173-478D-ABBE-0E9FC0E93B57}" 9 | EndProject 10 | Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "LeadingCode.RedisPack.Installer", "LeadingCode.RedisPack.Installer\LeadingCode.RedisPack.Installer.vdproj", "{29A37CC5-A177-4545-BEB8-B4FB33FA9748}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {29A37CC5-A177-4545-BEB8-B4FB33FA9748}.Debug|Any CPU.ActiveCfg = Debug 23 | {29A37CC5-A177-4545-BEB8-B4FB33FA9748}.Release|Any CPU.ActiveCfg = Release 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(NestedProjects) = preSolution 29 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF} = {25D4C66E-2173-478D-ABBE-0E9FC0E93B57} 30 | {29A37CC5-A177-4545-BEB8-B4FB33FA9748} = {25D4C66E-2173-478D-ABBE-0E9FC0E93B57} 31 | EndGlobalSection 32 | EndGlobal 33 | -------------------------------------------------------------------------------- /LeadingCode.RedisPack.Installer/LeadingCode.RedisPack.Installer.vdproj: -------------------------------------------------------------------------------- 1 | "DeployProject" 2 | { 3 | "VSVersion" = "3:800" 4 | "ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" 5 | "IsWebType" = "8:FALSE" 6 | "ProjectName" = "8:LeadingCode.RedisPack.Installer" 7 | "LanguageId" = "3:2052" 8 | "CodePage" = "3:936" 9 | "UILanguageId" = "3:2052" 10 | "SccProjectName" = "8:" 11 | "SccLocalPath" = "8:" 12 | "SccAuxPath" = "8:" 13 | "SccProvider" = "8:" 14 | "Hierarchy" 15 | { 16 | "Entry" 17 | { 18 | "MsmKey" = "8:_122229FA5EB9409FA32EC6BE374B6829" 19 | "OwnerKey" = "8:_UNDEFINED" 20 | "MsmSig" = "8:_UNDEFINED" 21 | } 22 | "Entry" 23 | { 24 | "MsmKey" = "8:_28487015933A4AE4A7BD7D6B548427B9" 25 | "OwnerKey" = "8:_UNDEFINED" 26 | "MsmSig" = "8:_UNDEFINED" 27 | } 28 | "Entry" 29 | { 30 | "MsmKey" = "8:_35462613A9824236B4460939529F53FE" 31 | "OwnerKey" = "8:_UNDEFINED" 32 | "MsmSig" = "8:_UNDEFINED" 33 | } 34 | "Entry" 35 | { 36 | "MsmKey" = "8:_36EB4B6FCE3742D49ED829BC1CE0F623" 37 | "OwnerKey" = "8:_UNDEFINED" 38 | "MsmSig" = "8:_UNDEFINED" 39 | } 40 | "Entry" 41 | { 42 | "MsmKey" = "8:_430638313D3344CDB008F393B7BEBDEE" 43 | "OwnerKey" = "8:_UNDEFINED" 44 | "MsmSig" = "8:_UNDEFINED" 45 | } 46 | "Entry" 47 | { 48 | "MsmKey" = "8:_541185C5FCDB4C0FBDFC75CF3726042B" 49 | "OwnerKey" = "8:_UNDEFINED" 50 | "MsmSig" = "8:_UNDEFINED" 51 | } 52 | "Entry" 53 | { 54 | "MsmKey" = "8:_62186D9DBC404E3BA95EC5247D97A3DC" 55 | "OwnerKey" = "8:_UNDEFINED" 56 | "MsmSig" = "8:_UNDEFINED" 57 | } 58 | "Entry" 59 | { 60 | "MsmKey" = "8:_6C8B43B27A9549A4BE3909F51F5F797F" 61 | "OwnerKey" = "8:_UNDEFINED" 62 | "MsmSig" = "8:_UNDEFINED" 63 | } 64 | "Entry" 65 | { 66 | "MsmKey" = "8:_72C8B5BF09E243CD9E8039B43441F6D4" 67 | "OwnerKey" = "8:_UNDEFINED" 68 | "MsmSig" = "8:_UNDEFINED" 69 | } 70 | "Entry" 71 | { 72 | "MsmKey" = "8:_A45B97F121584F03A99826E75FC5CFB6" 73 | "OwnerKey" = "8:_UNDEFINED" 74 | "MsmSig" = "8:_UNDEFINED" 75 | } 76 | "Entry" 77 | { 78 | "MsmKey" = "8:_B7404AE1B7024E87B33DFDD51D31247B" 79 | "OwnerKey" = "8:_UNDEFINED" 80 | "MsmSig" = "8:_UNDEFINED" 81 | } 82 | } 83 | "Configurations" 84 | { 85 | "Debug" 86 | { 87 | "DisplayName" = "8:Debug" 88 | "IsDebugOnly" = "11:TRUE" 89 | "IsReleaseOnly" = "11:FALSE" 90 | "OutputFilename" = "8:Debug\\LeadingCode.RedisPack.Installer.msi" 91 | "PackageFilesAs" = "3:2" 92 | "PackageFileSize" = "3:-2147483648" 93 | "CabType" = "3:1" 94 | "Compression" = "3:2" 95 | "SignOutput" = "11:FALSE" 96 | "CertificateFile" = "8:" 97 | "PrivateKeyFile" = "8:" 98 | "TimeStampServer" = "8:" 99 | "InstallerBootstrapper" = "3:2" 100 | } 101 | "Release" 102 | { 103 | "DisplayName" = "8:Release" 104 | "IsDebugOnly" = "11:FALSE" 105 | "IsReleaseOnly" = "11:TRUE" 106 | "OutputFilename" = "8:Release\\LeadingCode.RedisPack.Installer.msi" 107 | "PackageFilesAs" = "3:2" 108 | "PackageFileSize" = "3:-2147483648" 109 | "CabType" = "3:1" 110 | "Compression" = "3:2" 111 | "SignOutput" = "11:FALSE" 112 | "CertificateFile" = "8:" 113 | "PrivateKeyFile" = "8:" 114 | "TimeStampServer" = "8:" 115 | "InstallerBootstrapper" = "3:2" 116 | } 117 | } 118 | "Deployable" 119 | { 120 | "CustomAction" 121 | { 122 | } 123 | "DefaultFeature" 124 | { 125 | "Name" = "8:DefaultFeature" 126 | "Title" = "8:" 127 | "Description" = "8:" 128 | } 129 | "ExternalPersistence" 130 | { 131 | "LaunchCondition" 132 | { 133 | "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_6A7BEB5D8FE34479B02D618DC24084AC" 134 | { 135 | "Name" = "8:.NET Core" 136 | "Message" = "8:[VSDNETCOREMSG]" 137 | "AllowLaterVersions" = "11:FALSE" 138 | "InstallUrl" = "8:https://dotnet.microsoft.com/download/dotnet-core/[NetCoreVerMajorDotMinor]" 139 | "IsNETCore" = "11:TRUE" 140 | "Architecture" = "2:0" 141 | "Runtime" = "2:0" 142 | } 143 | } 144 | } 145 | "File" 146 | { 147 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_122229FA5EB9409FA32EC6BE374B6829" 148 | { 149 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\App.xaml" 150 | "TargetName" = "8:App.xaml" 151 | "Tag" = "8:" 152 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 153 | "Condition" = "8:" 154 | "Transitive" = "11:FALSE" 155 | "Vital" = "11:TRUE" 156 | "ReadOnly" = "11:FALSE" 157 | "Hidden" = "11:FALSE" 158 | "System" = "11:FALSE" 159 | "Permanent" = "11:FALSE" 160 | "SharedLegacy" = "11:FALSE" 161 | "PackageAs" = "3:1" 162 | "Register" = "3:1" 163 | "Exclude" = "11:FALSE" 164 | "IsDependency" = "11:FALSE" 165 | "IsolateTo" = "8:" 166 | } 167 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_28487015933A4AE4A7BD7D6B548427B9" 168 | { 169 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\appsettings.json" 170 | "TargetName" = "8:appsettings.json" 171 | "Tag" = "8:" 172 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 173 | "Condition" = "8:" 174 | "Transitive" = "11:FALSE" 175 | "Vital" = "11:TRUE" 176 | "ReadOnly" = "11:FALSE" 177 | "Hidden" = "11:FALSE" 178 | "System" = "11:FALSE" 179 | "Permanent" = "11:FALSE" 180 | "SharedLegacy" = "11:FALSE" 181 | "PackageAs" = "3:1" 182 | "Register" = "3:1" 183 | "Exclude" = "11:FALSE" 184 | "IsDependency" = "11:FALSE" 185 | "IsolateTo" = "8:" 186 | } 187 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_35462613A9824236B4460939529F53FE" 188 | { 189 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\AssemblyInfo.cs" 190 | "TargetName" = "8:AssemblyInfo.cs" 191 | "Tag" = "8:" 192 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 193 | "Condition" = "8:" 194 | "Transitive" = "11:FALSE" 195 | "Vital" = "11:TRUE" 196 | "ReadOnly" = "11:FALSE" 197 | "Hidden" = "11:FALSE" 198 | "System" = "11:FALSE" 199 | "Permanent" = "11:FALSE" 200 | "SharedLegacy" = "11:FALSE" 201 | "PackageAs" = "3:1" 202 | "Register" = "3:1" 203 | "Exclude" = "11:FALSE" 204 | "IsDependency" = "11:FALSE" 205 | "IsolateTo" = "8:" 206 | } 207 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_36EB4B6FCE3742D49ED829BC1CE0F623" 208 | { 209 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\logo.ico" 210 | "TargetName" = "8:logo.ico" 211 | "Tag" = "8:" 212 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 213 | "Condition" = "8:" 214 | "Transitive" = "11:FALSE" 215 | "Vital" = "11:TRUE" 216 | "ReadOnly" = "11:FALSE" 217 | "Hidden" = "11:FALSE" 218 | "System" = "11:FALSE" 219 | "Permanent" = "11:FALSE" 220 | "SharedLegacy" = "11:FALSE" 221 | "PackageAs" = "3:1" 222 | "Register" = "3:1" 223 | "Exclude" = "11:FALSE" 224 | "IsDependency" = "11:FALSE" 225 | "IsolateTo" = "8:" 226 | } 227 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_541185C5FCDB4C0FBDFC75CF3726042B" 228 | { 229 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\LeadingCode.RedisPack.csproj.user" 230 | "TargetName" = "8:LeadingCode.RedisPack.csproj.user" 231 | "Tag" = "8:" 232 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 233 | "Condition" = "8:" 234 | "Transitive" = "11:FALSE" 235 | "Vital" = "11:TRUE" 236 | "ReadOnly" = "11:FALSE" 237 | "Hidden" = "11:FALSE" 238 | "System" = "11:FALSE" 239 | "Permanent" = "11:FALSE" 240 | "SharedLegacy" = "11:FALSE" 241 | "PackageAs" = "3:1" 242 | "Register" = "3:1" 243 | "Exclude" = "11:FALSE" 244 | "IsDependency" = "11:FALSE" 245 | "IsolateTo" = "8:" 246 | } 247 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_62186D9DBC404E3BA95EC5247D97A3DC" 248 | { 249 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\dlfcn.h" 250 | "TargetName" = "8:dlfcn.h" 251 | "Tag" = "8:" 252 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 253 | "Condition" = "8:" 254 | "Transitive" = "11:FALSE" 255 | "Vital" = "11:TRUE" 256 | "ReadOnly" = "11:FALSE" 257 | "Hidden" = "11:FALSE" 258 | "System" = "11:FALSE" 259 | "Permanent" = "11:FALSE" 260 | "SharedLegacy" = "11:FALSE" 261 | "PackageAs" = "3:1" 262 | "Register" = "3:1" 263 | "Exclude" = "11:FALSE" 264 | "IsDependency" = "11:FALSE" 265 | "IsolateTo" = "8:" 266 | } 267 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6C8B43B27A9549A4BE3909F51F5F797F" 268 | { 269 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\LeadingCode.RedisPack.csproj" 270 | "TargetName" = "8:LeadingCode.RedisPack.csproj" 271 | "Tag" = "8:" 272 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 273 | "Condition" = "8:" 274 | "Transitive" = "11:FALSE" 275 | "Vital" = "11:TRUE" 276 | "ReadOnly" = "11:FALSE" 277 | "Hidden" = "11:FALSE" 278 | "System" = "11:FALSE" 279 | "Permanent" = "11:FALSE" 280 | "SharedLegacy" = "11:FALSE" 281 | "PackageAs" = "3:1" 282 | "Register" = "3:1" 283 | "Exclude" = "11:FALSE" 284 | "IsDependency" = "11:FALSE" 285 | "IsolateTo" = "8:" 286 | } 287 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_72C8B5BF09E243CD9E8039B43441F6D4" 288 | { 289 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\App.xaml.cs" 290 | "TargetName" = "8:App.xaml.cs" 291 | "Tag" = "8:" 292 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 293 | "Condition" = "8:" 294 | "Transitive" = "11:FALSE" 295 | "Vital" = "11:TRUE" 296 | "ReadOnly" = "11:FALSE" 297 | "Hidden" = "11:FALSE" 298 | "System" = "11:FALSE" 299 | "Permanent" = "11:FALSE" 300 | "SharedLegacy" = "11:FALSE" 301 | "PackageAs" = "3:1" 302 | "Register" = "3:1" 303 | "Exclude" = "11:FALSE" 304 | "IsDependency" = "11:FALSE" 305 | "IsolateTo" = "8:" 306 | } 307 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A45B97F121584F03A99826E75FC5CFB6" 308 | { 309 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\appsettings.secrets.json" 310 | "TargetName" = "8:appsettings.secrets.json" 311 | "Tag" = "8:" 312 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 313 | "Condition" = "8:" 314 | "Transitive" = "11:FALSE" 315 | "Vital" = "11:TRUE" 316 | "ReadOnly" = "11:FALSE" 317 | "Hidden" = "11:FALSE" 318 | "System" = "11:FALSE" 319 | "Permanent" = "11:FALSE" 320 | "SharedLegacy" = "11:FALSE" 321 | "PackageAs" = "3:1" 322 | "Register" = "3:1" 323 | "Exclude" = "11:FALSE" 324 | "IsDependency" = "11:FALSE" 325 | "IsolateTo" = "8:" 326 | } 327 | "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B7404AE1B7024E87B33DFDD51D31247B" 328 | { 329 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\RedisPackModule.cs" 330 | "TargetName" = "8:RedisPackModule.cs" 331 | "Tag" = "8:" 332 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 333 | "Condition" = "8:" 334 | "Transitive" = "11:FALSE" 335 | "Vital" = "11:TRUE" 336 | "ReadOnly" = "11:FALSE" 337 | "Hidden" = "11:FALSE" 338 | "System" = "11:FALSE" 339 | "Permanent" = "11:FALSE" 340 | "SharedLegacy" = "11:FALSE" 341 | "PackageAs" = "3:1" 342 | "Register" = "3:1" 343 | "Exclude" = "11:FALSE" 344 | "IsDependency" = "11:FALSE" 345 | "IsolateTo" = "8:" 346 | } 347 | } 348 | "FileType" 349 | { 350 | } 351 | "Folder" 352 | { 353 | "{1525181F-901A-416C-8A58-119130FE478E}:_360508FBCEAF45328EF941DDD7A7587A" 354 | { 355 | "Name" = "8:#1916" 356 | "AlwaysCreate" = "11:FALSE" 357 | "Condition" = "8:" 358 | "Transitive" = "11:FALSE" 359 | "Property" = "8:DesktopFolder" 360 | "Folders" 361 | { 362 | } 363 | } 364 | "{1525181F-901A-416C-8A58-119130FE478E}:_3B25A2A194F24A36B009F69BE1228EC8" 365 | { 366 | "Name" = "8:#1919" 367 | "AlwaysCreate" = "11:FALSE" 368 | "Condition" = "8:" 369 | "Transitive" = "11:FALSE" 370 | "Property" = "8:ProgramMenuFolder" 371 | "Folders" 372 | { 373 | } 374 | } 375 | "{3C67513D-01DD-4637-8A68-80971EB9504F}:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 376 | { 377 | "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" 378 | "Name" = "8:#1925" 379 | "AlwaysCreate" = "11:FALSE" 380 | "Condition" = "8:" 381 | "Transitive" = "11:FALSE" 382 | "Property" = "8:TARGETDIR" 383 | "Folders" 384 | { 385 | } 386 | } 387 | } 388 | "LaunchCondition" 389 | { 390 | } 391 | "Locator" 392 | { 393 | } 394 | "MsiBootstrapper" 395 | { 396 | "LangId" = "3:2052" 397 | "RequiresElevation" = "11:FALSE" 398 | } 399 | "Product" 400 | { 401 | "Name" = "8:Microsoft Visual Studio" 402 | "ProductName" = "8:LeadingCode.RedisPack" 403 | "ProductCode" = "8:{CC1F6F18-4249-4748-B2D8-A24259D4B25D}" 404 | "PackageCode" = "8:{B23380F9-7C6F-4EAA-930C-6B4C147C31BD}" 405 | "UpgradeCode" = "8:{2B53AE0D-BCE3-46D6-80CB-9086E127ABDD}" 406 | "AspNetVersion" = "8:4.0.30319.0" 407 | "RestartWWWService" = "11:FALSE" 408 | "RemovePreviousVersions" = "11:TRUE" 409 | "DetectNewerInstalledVersion" = "11:TRUE" 410 | "InstallAllUsers" = "11:FALSE" 411 | "ProductVersion" = "8:1.0.1" 412 | "Manufacturer" = "8:LeadingCode" 413 | "ARPHELPTELEPHONE" = "8:" 414 | "ARPHELPLINK" = "8:" 415 | "Title" = "8:LeadingCode.RedisPack" 416 | "Subject" = "8:" 417 | "ARPCONTACT" = "8:LeadingCode" 418 | "Keywords" = "8:" 419 | "ARPCOMMENTS" = "8:" 420 | "ARPURLINFOABOUT" = "8:" 421 | "ARPPRODUCTICON" = "8:" 422 | "ARPIconIndex" = "3:0" 423 | "SearchPath" = "8:" 424 | "UseSystemSearchPath" = "11:TRUE" 425 | "TargetPlatform" = "3:0" 426 | "PreBuildEvent" = "8:" 427 | "PostBuildEvent" = "8:" 428 | "RunPostBuildEvent" = "3:0" 429 | } 430 | "Registry" 431 | { 432 | "HKLM" 433 | { 434 | "Keys" 435 | { 436 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AAB8209CB6064137917B813E1B84E64F" 437 | { 438 | "Name" = "8:Software" 439 | "Condition" = "8:" 440 | "AlwaysCreate" = "11:FALSE" 441 | "DeleteAtUninstall" = "11:FALSE" 442 | "Transitive" = "11:FALSE" 443 | "Keys" 444 | { 445 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_EC7264972F7C4F3DA9D28CA5FEA472C7" 446 | { 447 | "Name" = "8:[Manufacturer]" 448 | "Condition" = "8:" 449 | "AlwaysCreate" = "11:FALSE" 450 | "DeleteAtUninstall" = "11:FALSE" 451 | "Transitive" = "11:FALSE" 452 | "Keys" 453 | { 454 | } 455 | "Values" 456 | { 457 | } 458 | } 459 | } 460 | "Values" 461 | { 462 | } 463 | } 464 | } 465 | } 466 | "HKCU" 467 | { 468 | "Keys" 469 | { 470 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_50C063B11E7D4E75A1A6DC6083DA5AE1" 471 | { 472 | "Name" = "8:Software" 473 | "Condition" = "8:" 474 | "AlwaysCreate" = "11:FALSE" 475 | "DeleteAtUninstall" = "11:FALSE" 476 | "Transitive" = "11:FALSE" 477 | "Keys" 478 | { 479 | "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_294DC48759B84AE291F7433FF9C29FEC" 480 | { 481 | "Name" = "8:[Manufacturer]" 482 | "Condition" = "8:" 483 | "AlwaysCreate" = "11:FALSE" 484 | "DeleteAtUninstall" = "11:FALSE" 485 | "Transitive" = "11:FALSE" 486 | "Keys" 487 | { 488 | } 489 | "Values" 490 | { 491 | } 492 | } 493 | } 494 | "Values" 495 | { 496 | } 497 | } 498 | } 499 | } 500 | "HKCR" 501 | { 502 | "Keys" 503 | { 504 | } 505 | } 506 | "HKU" 507 | { 508 | "Keys" 509 | { 510 | } 511 | } 512 | "HKPU" 513 | { 514 | "Keys" 515 | { 516 | } 517 | } 518 | } 519 | "Sequences" 520 | { 521 | } 522 | "Shortcut" 523 | { 524 | "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_1A341A7F28634124B923E557A9352128" 525 | { 526 | "Name" = "8:LeadingCode.RedisPack" 527 | "Arguments" = "8:" 528 | "Description" = "8:" 529 | "ShowCmd" = "3:1" 530 | "IconIndex" = "3:0" 531 | "Transitive" = "11:FALSE" 532 | "Target" = "8:_430638313D3344CDB008F393B7BEBDEE" 533 | "Folder" = "8:_360508FBCEAF45328EF941DDD7A7587A" 534 | "WorkingFolder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 535 | "Icon" = "8:_36EB4B6FCE3742D49ED829BC1CE0F623" 536 | "Feature" = "8:" 537 | } 538 | } 539 | "UserInterface" 540 | { 541 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_4EE75D0A9CA74FC5B316C16975812D18" 542 | { 543 | "Name" = "8:#1901" 544 | "Sequence" = "3:1" 545 | "Attributes" = "3:2" 546 | "Dialogs" 547 | { 548 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_09999B15DF6F4056AC6D60EBF4C2A771" 549 | { 550 | "Sequence" = "3:100" 551 | "DisplayName" = "8:进度" 552 | "UseDynamicProperties" = "11:TRUE" 553 | "IsDependency" = "11:FALSE" 554 | "SourcePath" = "8:\\VsdProgressDlg.wid" 555 | "Properties" 556 | { 557 | "BannerBitmap" 558 | { 559 | "Name" = "8:BannerBitmap" 560 | "DisplayName" = "8:#1001" 561 | "Description" = "8:#1101" 562 | "Type" = "3:8" 563 | "ContextData" = "8:Bitmap" 564 | "Attributes" = "3:4" 565 | "Setting" = "3:1" 566 | "UsePlugInResources" = "11:TRUE" 567 | } 568 | "ShowProgress" 569 | { 570 | "Name" = "8:ShowProgress" 571 | "DisplayName" = "8:#1009" 572 | "Description" = "8:#1109" 573 | "Type" = "3:5" 574 | "ContextData" = "8:1;True=1;False=0" 575 | "Attributes" = "3:0" 576 | "Setting" = "3:0" 577 | "Value" = "3:1" 578 | "DefaultValue" = "3:1" 579 | "UsePlugInResources" = "11:TRUE" 580 | } 581 | } 582 | } 583 | } 584 | } 585 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_85981518DA0A4E329C7B4E6C19F75911" 586 | { 587 | "Name" = "8:#1902" 588 | "Sequence" = "3:1" 589 | "Attributes" = "3:3" 590 | "Dialogs" 591 | { 592 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_773C9DDD63DD42C6806BFBF493E26069" 593 | { 594 | "Sequence" = "3:100" 595 | "DisplayName" = "8:已完成" 596 | "UseDynamicProperties" = "11:TRUE" 597 | "IsDependency" = "11:FALSE" 598 | "SourcePath" = "8:\\VsdFinishedDlg.wid" 599 | "Properties" 600 | { 601 | "BannerBitmap" 602 | { 603 | "Name" = "8:BannerBitmap" 604 | "DisplayName" = "8:#1001" 605 | "Description" = "8:#1101" 606 | "Type" = "3:8" 607 | "ContextData" = "8:Bitmap" 608 | "Attributes" = "3:4" 609 | "Setting" = "3:1" 610 | "UsePlugInResources" = "11:TRUE" 611 | } 612 | "UpdateText" 613 | { 614 | "Name" = "8:UpdateText" 615 | "DisplayName" = "8:#1058" 616 | "Description" = "8:#1158" 617 | "Type" = "3:15" 618 | "ContextData" = "8:" 619 | "Attributes" = "3:0" 620 | "Setting" = "3:1" 621 | "Value" = "8:#1258" 622 | "DefaultValue" = "8:#1258" 623 | "UsePlugInResources" = "11:TRUE" 624 | } 625 | } 626 | } 627 | } 628 | } 629 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_91A4DDFAD3774A62A6F00CA71F42F29E" 630 | { 631 | "Name" = "8:#1900" 632 | "Sequence" = "3:2" 633 | "Attributes" = "3:1" 634 | "Dialogs" 635 | { 636 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3AB2BA3CF9BE427A92A6013BE55C915C" 637 | { 638 | "Sequence" = "3:200" 639 | "DisplayName" = "8:安装文件夹" 640 | "UseDynamicProperties" = "11:TRUE" 641 | "IsDependency" = "11:FALSE" 642 | "SourcePath" = "8:\\VsdAdminFolderDlg.wid" 643 | "Properties" 644 | { 645 | "BannerBitmap" 646 | { 647 | "Name" = "8:BannerBitmap" 648 | "DisplayName" = "8:#1001" 649 | "Description" = "8:#1101" 650 | "Type" = "3:8" 651 | "ContextData" = "8:Bitmap" 652 | "Attributes" = "3:4" 653 | "Setting" = "3:1" 654 | "UsePlugInResources" = "11:TRUE" 655 | } 656 | } 657 | } 658 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_40DB880871BF4A159E06A809DBD1C822" 659 | { 660 | "Sequence" = "3:100" 661 | "DisplayName" = "8:欢迎使用" 662 | "UseDynamicProperties" = "11:TRUE" 663 | "IsDependency" = "11:FALSE" 664 | "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" 665 | "Properties" 666 | { 667 | "BannerBitmap" 668 | { 669 | "Name" = "8:BannerBitmap" 670 | "DisplayName" = "8:#1001" 671 | "Description" = "8:#1101" 672 | "Type" = "3:8" 673 | "ContextData" = "8:Bitmap" 674 | "Attributes" = "3:4" 675 | "Setting" = "3:1" 676 | "UsePlugInResources" = "11:TRUE" 677 | } 678 | "CopyrightWarning" 679 | { 680 | "Name" = "8:CopyrightWarning" 681 | "DisplayName" = "8:#1002" 682 | "Description" = "8:#1102" 683 | "Type" = "3:3" 684 | "ContextData" = "8:" 685 | "Attributes" = "3:0" 686 | "Setting" = "3:1" 687 | "Value" = "8:#1202" 688 | "DefaultValue" = "8:#1202" 689 | "UsePlugInResources" = "11:TRUE" 690 | } 691 | "Welcome" 692 | { 693 | "Name" = "8:Welcome" 694 | "DisplayName" = "8:#1003" 695 | "Description" = "8:#1103" 696 | "Type" = "3:3" 697 | "ContextData" = "8:" 698 | "Attributes" = "3:0" 699 | "Setting" = "3:1" 700 | "Value" = "8:#1203" 701 | "DefaultValue" = "8:#1203" 702 | "UsePlugInResources" = "11:TRUE" 703 | } 704 | } 705 | } 706 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D766B949C30645B88B673977B5D8FA8E" 707 | { 708 | "Sequence" = "3:300" 709 | "DisplayName" = "8:确认安装" 710 | "UseDynamicProperties" = "11:TRUE" 711 | "IsDependency" = "11:FALSE" 712 | "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" 713 | "Properties" 714 | { 715 | "BannerBitmap" 716 | { 717 | "Name" = "8:BannerBitmap" 718 | "DisplayName" = "8:#1001" 719 | "Description" = "8:#1101" 720 | "Type" = "3:8" 721 | "ContextData" = "8:Bitmap" 722 | "Attributes" = "3:4" 723 | "Setting" = "3:1" 724 | "UsePlugInResources" = "11:TRUE" 725 | } 726 | } 727 | } 728 | } 729 | } 730 | "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_9A166FF3C195481F8CFBC16F061D1D9B" 731 | { 732 | "UseDynamicProperties" = "11:FALSE" 733 | "IsDependency" = "11:FALSE" 734 | "SourcePath" = "8:\\VsdUserInterface.wim" 735 | } 736 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BA1D56744DC84A7EA54F237599E81354" 737 | { 738 | "Name" = "8:#1900" 739 | "Sequence" = "3:1" 740 | "Attributes" = "3:1" 741 | "Dialogs" 742 | { 743 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_331B098DEA39413EAF239189361D9227" 744 | { 745 | "Sequence" = "3:100" 746 | "DisplayName" = "8:欢迎使用" 747 | "UseDynamicProperties" = "11:TRUE" 748 | "IsDependency" = "11:FALSE" 749 | "SourcePath" = "8:\\VsdWelcomeDlg.wid" 750 | "Properties" 751 | { 752 | "BannerBitmap" 753 | { 754 | "Name" = "8:BannerBitmap" 755 | "DisplayName" = "8:#1001" 756 | "Description" = "8:#1101" 757 | "Type" = "3:8" 758 | "ContextData" = "8:Bitmap" 759 | "Attributes" = "3:4" 760 | "Setting" = "3:1" 761 | "UsePlugInResources" = "11:TRUE" 762 | } 763 | "CopyrightWarning" 764 | { 765 | "Name" = "8:CopyrightWarning" 766 | "DisplayName" = "8:#1002" 767 | "Description" = "8:#1102" 768 | "Type" = "3:3" 769 | "ContextData" = "8:" 770 | "Attributes" = "3:0" 771 | "Setting" = "3:1" 772 | "Value" = "8:#1202" 773 | "DefaultValue" = "8:#1202" 774 | "UsePlugInResources" = "11:TRUE" 775 | } 776 | "Welcome" 777 | { 778 | "Name" = "8:Welcome" 779 | "DisplayName" = "8:#1003" 780 | "Description" = "8:#1103" 781 | "Type" = "3:3" 782 | "ContextData" = "8:" 783 | "Attributes" = "3:0" 784 | "Setting" = "3:1" 785 | "Value" = "8:#1203" 786 | "DefaultValue" = "8:#1203" 787 | "UsePlugInResources" = "11:TRUE" 788 | } 789 | } 790 | } 791 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7532A470053F401EB417D1368681874E" 792 | { 793 | "Sequence" = "3:300" 794 | "DisplayName" = "8:确认安装" 795 | "UseDynamicProperties" = "11:TRUE" 796 | "IsDependency" = "11:FALSE" 797 | "SourcePath" = "8:\\VsdConfirmDlg.wid" 798 | "Properties" 799 | { 800 | "BannerBitmap" 801 | { 802 | "Name" = "8:BannerBitmap" 803 | "DisplayName" = "8:#1001" 804 | "Description" = "8:#1101" 805 | "Type" = "3:8" 806 | "ContextData" = "8:Bitmap" 807 | "Attributes" = "3:4" 808 | "Setting" = "3:1" 809 | "UsePlugInResources" = "11:TRUE" 810 | } 811 | } 812 | } 813 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FCBF384C22DB4B1D9A43DF4FF092EEF8" 814 | { 815 | "Sequence" = "3:200" 816 | "DisplayName" = "8:安装文件夹" 817 | "UseDynamicProperties" = "11:TRUE" 818 | "IsDependency" = "11:FALSE" 819 | "SourcePath" = "8:\\VsdFolderDlg.wid" 820 | "Properties" 821 | { 822 | "BannerBitmap" 823 | { 824 | "Name" = "8:BannerBitmap" 825 | "DisplayName" = "8:#1001" 826 | "Description" = "8:#1101" 827 | "Type" = "3:8" 828 | "ContextData" = "8:Bitmap" 829 | "Attributes" = "3:4" 830 | "Setting" = "3:1" 831 | "UsePlugInResources" = "11:TRUE" 832 | } 833 | "InstallAllUsersVisible" 834 | { 835 | "Name" = "8:InstallAllUsersVisible" 836 | "DisplayName" = "8:#1059" 837 | "Description" = "8:#1159" 838 | "Type" = "3:5" 839 | "ContextData" = "8:1;True=1;False=0" 840 | "Attributes" = "3:0" 841 | "Setting" = "3:0" 842 | "Value" = "3:1" 843 | "DefaultValue" = "3:1" 844 | "UsePlugInResources" = "11:TRUE" 845 | } 846 | } 847 | } 848 | } 849 | } 850 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BC5D1815F78C4813811BD42C6514FC05" 851 | { 852 | "Name" = "8:#1901" 853 | "Sequence" = "3:2" 854 | "Attributes" = "3:2" 855 | "Dialogs" 856 | { 857 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2A0A8130A0FF4773BC4AB36FE57C8259" 858 | { 859 | "Sequence" = "3:100" 860 | "DisplayName" = "8:进度" 861 | "UseDynamicProperties" = "11:TRUE" 862 | "IsDependency" = "11:FALSE" 863 | "SourcePath" = "8:\\VsdAdminProgressDlg.wid" 864 | "Properties" 865 | { 866 | "BannerBitmap" 867 | { 868 | "Name" = "8:BannerBitmap" 869 | "DisplayName" = "8:#1001" 870 | "Description" = "8:#1101" 871 | "Type" = "3:8" 872 | "ContextData" = "8:Bitmap" 873 | "Attributes" = "3:4" 874 | "Setting" = "3:1" 875 | "UsePlugInResources" = "11:TRUE" 876 | } 877 | "ShowProgress" 878 | { 879 | "Name" = "8:ShowProgress" 880 | "DisplayName" = "8:#1009" 881 | "Description" = "8:#1109" 882 | "Type" = "3:5" 883 | "ContextData" = "8:1;True=1;False=0" 884 | "Attributes" = "3:0" 885 | "Setting" = "3:0" 886 | "Value" = "3:1" 887 | "DefaultValue" = "3:1" 888 | "UsePlugInResources" = "11:TRUE" 889 | } 890 | } 891 | } 892 | } 893 | } 894 | "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C0B17C7E4969453AB2D4A61C451A7205" 895 | { 896 | "Name" = "8:#1902" 897 | "Sequence" = "3:2" 898 | "Attributes" = "3:3" 899 | "Dialogs" 900 | { 901 | "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A45F53443D24432F862FEDE41FCC09B7" 902 | { 903 | "Sequence" = "3:100" 904 | "DisplayName" = "8:已完成" 905 | "UseDynamicProperties" = "11:TRUE" 906 | "IsDependency" = "11:FALSE" 907 | "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" 908 | "Properties" 909 | { 910 | "BannerBitmap" 911 | { 912 | "Name" = "8:BannerBitmap" 913 | "DisplayName" = "8:#1001" 914 | "Description" = "8:#1101" 915 | "Type" = "3:8" 916 | "ContextData" = "8:Bitmap" 917 | "Attributes" = "3:4" 918 | "Setting" = "3:1" 919 | "UsePlugInResources" = "11:TRUE" 920 | } 921 | } 922 | } 923 | } 924 | } 925 | "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_E278F093F57246C4BCC16F4A77098362" 926 | { 927 | "UseDynamicProperties" = "11:FALSE" 928 | "IsDependency" = "11:FALSE" 929 | "SourcePath" = "8:\\VsdBasicDialogs.wim" 930 | } 931 | } 932 | "MergeModule" 933 | { 934 | } 935 | "ProjectOutput" 936 | { 937 | "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_430638313D3344CDB008F393B7BEBDEE" 938 | { 939 | "SourcePath" = "8:..\\src\\LeadingCode.RedisPack\\obj\\Release\\net7.0-windows\\apphost.exe" 940 | "TargetName" = "8:" 941 | "Tag" = "8:" 942 | "Folder" = "8:_B284F9C91D6B4A2BA0BBA6E596CCEF3A" 943 | "Condition" = "8:" 944 | "Transitive" = "11:FALSE" 945 | "Vital" = "11:TRUE" 946 | "ReadOnly" = "11:FALSE" 947 | "Hidden" = "11:FALSE" 948 | "System" = "11:FALSE" 949 | "Permanent" = "11:FALSE" 950 | "SharedLegacy" = "11:FALSE" 951 | "PackageAs" = "3:1" 952 | "Register" = "3:1" 953 | "Exclude" = "11:FALSE" 954 | "IsDependency" = "11:FALSE" 955 | "IsolateTo" = "8:" 956 | "ProjectOutputGroupRegister" = "3:1" 957 | "OutputConfiguration" = "8:" 958 | "OutputGroupCanonicalName" = "8:PublishItems" 959 | "OutputProjectGuid" = "8:{7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}" 960 | "ShowKeyOutput" = "11:TRUE" 961 | "ExcludeFilters" 962 | { 963 | } 964 | } 965 | } 966 | } 967 | } 968 | -------------------------------------------------------------------------------- /LeadingCode.RedisPack.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LeadingCode.RedisPack", "src\LeadingCode.RedisPack\LeadingCode.RedisPack.csproj", "{7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}" 4 | EndProject 5 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{25D4C66E-2173-478D-ABBE-0E9FC0E93B57}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|Any CPU = Debug|Any CPU 10 | Release|Any CPU = Release|Any CPU 11 | EndGlobalSection 12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 13 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 14 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Debug|Any CPU.Build.0 = Debug|Any CPU 15 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Release|Any CPU.ActiveCfg = Release|Any CPU 16 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF}.Release|Any CPU.Build.0 = Release|Any CPU 17 | EndGlobalSection 18 | GlobalSection(NestedProjects) = preSolution 19 | {7CC4F9BA-520E-4D2E-92A5-8B91BFA08CBF} = {25D4C66E-2173-478D-ABBE-0E9FC0E93B57} 20 | EndGlobalSection 21 | EndGlobal 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # LeadingCode.RedisPack 3 |

4 | 中文 | 5 | English 6 |

7 | Reids Windows 安装包编译器;包含最新Redis Windows安装包下载。该软件可以引导手动编译Redis Windows包,也提供了自动编译Redis Windows包功能。 8 | 9 | PS:因本人不熟悉WPF,请手下留情。 10 | 11 | # Redis Windows 安装包 12 | |版本|下载地址| 13 | |-|-| 14 | |7.2-rc|[下载](/attrs/redis-7.2-rc.7z)| 15 | |7.0.11|[下载](/attrs/redis-7.0.11.7z)| 16 | |7.0.10|[下载](/attrs/redis-7.0.10.7z)| 17 | |7.0.9|[下载](/attrs/redis-7.0.9.7z)| 18 | |7.0.8|[下载](/attrs/redis-7.0.8.7z)| 19 | |7.0.7|[下载](/attrs/redis-7.0.7.7z)| 20 | |7.0.6|[下载](/attrs/redis-7.0.6.7z)| 21 | |7.0.5|[下载](/attrs/redis-7.0.5.7z)| 22 | |7.0.4|[下载](/attrs/redis-7.0.4.7z)| 23 | |7.0.3|[下载](/attrs/redis-7.0.3.7z)| 24 | |7.0.2|[下载](/attrs/redis-7.0.2.7z)| 25 | |7.0.1|[下载](/attrs/redis-7.0.1.7z)| 26 | |7.0.0|[下载](/attrs/redis-7.0.0.7z)| 27 | |6.2.9|[下载](/attrs/redis-6.2.9.7z)| 28 | 29 | # Redis Window 运行命令 30 | ``` 31 | redis-server.exe redis.conf 32 | ``` 33 | PS:可结合[nssm](http://www.nssm.cc/)安装成window服务 34 | 35 | # Redis Windows 编译工具安装包 36 | [exe文件下载](/attrs/setup.exe) 37 | 38 | [msi文件下载](/attrs/LeadingCode.RedisPack.Installer.msi) 39 | 40 | # 效果展示 41 | ![自动生成](/doc/1.png) 42 | ![手动生成](/doc/2.png) 43 | ![Redis版本](/doc/3.png) 44 | ![系统设置](/doc/5.png) 45 | -------------------------------------------------------------------------------- /README_EN.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # LeadingCode.RedisPack 4 |

5 | 中文 6 | | English 7 |

8 | Reids Windows installation package compiler; contains the latest Redis Windows installation package download. The software can guide the manual compilation of Redis Windows packages, and also provides the function of automatically compiling Redis Windows packages. 9 | 10 | PS: Since I am not familiar with WPF, please be merciful. 11 | 12 | # Redis windows installation package 13 | |Version|Download link| 14 | |-|-| 15 | |7.2-rc|[Download](/attrs/redis-7.2-rc.7z)| 16 | |7.0.11|[Download](/attrs/redis-7.0.11.7z)| 17 | |7.0.10|[Download](/attrs/redis-7.0.10.7z)| 18 | |7.0.9|[Download](/attrs/redis-7.0.9.7z)| 19 | |7.0.8|[Download](/attrs/redis-7.0.8.7z)| 20 | |7.0.7|[Download](/attrs/redis-7.0.7.7z)| 21 | |7.0.6|[Download](/attrs/redis-7.0.6.7z)| 22 | |7.0.5|[Download](/attrs/redis-7.0.5.7z)| 23 | |7.0.4|[Download](/attrs/redis-7.0.4.7z)| 24 | |7.0.3|[Download](/attrs/redis-7.0.3.7z)| 25 | |7.0.2|[Download](/attrs/redis-7.0.2.7z)| 26 | |7.0.1|[Download](/attrs/redis-7.0.1.7z)| 27 | |7.0.0|[Download](/attrs/redis-7.0.0.7z)| 28 | |6.2.9|[Download](/attrs/redis-6.2.9.7z)| 29 | 30 | 31 | # Redis windows run command 32 | ``` 33 | redis-server.exe redis.conf 34 | ``` 35 | PS:Can be installed as a window service in conjunction with [nssm](http://www.nssm.cc/) 36 | 37 | # Redis windows compilation tool installation package 38 | [exe file download](/attrs/setup.exe) 39 | 40 | [msi file download](/attrs/LeadingCode.RedisPack.Installer.msi) 41 | 42 | # Show results 43 | ![自动生成](/doc/1.png) 44 | ![手动生成](/doc/2.png) 45 | ![Redis版本](/doc/3.png) 46 | ![系统设置](/doc/5.png) 47 | -------------------------------------------------------------------------------- /attrs/LeadingCode.RedisPack.Installer.msi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/LeadingCode.RedisPack.Installer.msi -------------------------------------------------------------------------------- /attrs/redis-6.2.9.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-6.2.9.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.0.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.0.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.1.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.1.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.10.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.10.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.11.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.11.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.2.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.2.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.3.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.3.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.4.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.4.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.5.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.5.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.6.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.6.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.7.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.7.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.8.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.8.7z -------------------------------------------------------------------------------- /attrs/redis-7.0.9.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.0.9.7z -------------------------------------------------------------------------------- /attrs/redis-7.2-rc.7z: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/redis-7.2-rc.7z -------------------------------------------------------------------------------- /attrs/setup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/attrs/setup.exe -------------------------------------------------------------------------------- /common.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | latest 4 | 0.1.0 5 | $(NoWarn);CS1591;CS0436 6 | 7 | -------------------------------------------------------------------------------- /doc/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/doc/1.png -------------------------------------------------------------------------------- /doc/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/doc/2.png -------------------------------------------------------------------------------- /doc/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/doc/3.png -------------------------------------------------------------------------------- /doc/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/doc/4.png -------------------------------------------------------------------------------- /doc/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/doc/5.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Apis/IGithubRedisApi.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Net.Http; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using LeadingCode.RedisPack.Models; 8 | using WebApiClientCore.Attributes; 9 | 10 | namespace LeadingCode.RedisPack.Apis 11 | { 12 | [HttpHost("https://api.github.com/")] 13 | public interface IGithubRedisApi 14 | { 15 | [HttpGet("repos/redis/redis/releases")] 16 | Task> GetAsync(); 17 | } 18 | 19 | [HttpHost("https://github.com/")] 20 | public interface IGithubRedisFileApi 21 | { 22 | [HttpGet("redis/redis/archive/refs/tags/{fileName}")] 23 | Task DownloadAsync(string fileName); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/App.xaml: -------------------------------------------------------------------------------- 1 |  8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Configuration; 3 | using System.Net.Http; 4 | using System.Windows; 5 | using LeadingCode.RedisPack.Helpers; 6 | using LeadingCode.RedisPack.Models; 7 | using LeadingCode.RedisPack.Views; 8 | using Microsoft.Extensions.Configuration; 9 | using Microsoft.Extensions.DependencyInjection; 10 | using Serilog; 11 | using Serilog.Events; 12 | using Volo.Abp; 13 | 14 | namespace LeadingCode.RedisPack; 15 | 16 | /// 17 | /// Interaction logic for App.xaml 18 | /// 19 | public partial class App : Application 20 | { 21 | private IAbpApplicationWithInternalServiceProvider? _abpApplication; 22 | 23 | protected override async void OnStartup(StartupEventArgs e) 24 | { 25 | Log.Logger = new LoggerConfiguration() 26 | #if DEBUG 27 | .MinimumLevel.Debug() 28 | #else 29 | .MinimumLevel.Information() 30 | #endif 31 | .MinimumLevel.Override("Microsoft", LogEventLevel.Information) 32 | .Enrich.FromLogContext() 33 | .WriteTo.Async(c => c.File("Logs/logs.txt")) 34 | .CreateLogger(); 35 | 36 | var configuration = new ConfigurationBuilder() 37 | .AddJsonFile("appsettings.json", 38 | optional: true, 39 | reloadOnChange: true) 40 | .Build(); 41 | 42 | try 43 | { 44 | Log.Information("Starting WPF host."); 45 | 46 | _abpApplication = await AbpApplicationFactory.CreateAsync(options => 47 | { 48 | options.UseAutofac(); 49 | options.Services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true)); 50 | options.Services.ConfigureWritable(configuration.GetSection("MSYS")); 51 | }); 52 | 53 | await _abpApplication.InitializeAsync(); 54 | 55 | _abpApplication.Services.GetRequiredService()?.ShowWindow(); 56 | 57 | } 58 | catch (Exception ex) 59 | { 60 | Log.Fatal(ex, "Host terminated unexpectedly!"); 61 | } 62 | } 63 | 64 | protected override async void OnExit(ExitEventArgs e) 65 | { 66 | if (_abpApplication != null) 67 | { 68 | await _abpApplication.ShutdownAsync(); 69 | } 70 | Log.CloseAndFlush(); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 5 | //(used if a resource is not found in the page, 6 | // or application resource dictionaries) 7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 8 | //(used if a resource is not found in the page, 9 | // app, or any theme specific resource dictionaries) 10 | )] -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/applicationIcon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/applicationIcon-1024.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/applicationIcon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/applicationIcon-256.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/dlinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/dlinfo.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/files-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/files-1.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/files.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/files.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/install-2-path.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/install-2-path.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/install-3-finish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/install-3-finish.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/install-4-cmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/install-4-cmd.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/make.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/make.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Assets/msyscd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/Assets/msyscd.png -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Converters/BoolToVisibilityConverter.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Windows; 8 | using System.Windows.Data; 9 | using System.Windows.Media; 10 | 11 | namespace LeadingCode.RedisPack.Converters; 12 | 13 | /// 14 | /// Converts to . 15 | /// 16 | internal class BoolToVisibilityConverter : IValueConverter 17 | { 18 | /// 19 | /// Converts to . 20 | /// 21 | public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 22 | { 23 | return value is true ? Visibility.Visible : Visibility.Collapsed; 24 | } 25 | 26 | /// 27 | /// Not Implemented. 28 | /// 29 | /// 30 | public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 31 | { 32 | throw new NotImplementedException(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Helpers/EnumToBooleanConverter.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Globalization; 8 | using System.Windows.Data; 9 | 10 | namespace LeadingCode.RedisPack.Helpers; 11 | 12 | internal class EnumToBooleanConverter : IValueConverter 13 | { 14 | public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 15 | { 16 | if (parameter is not String enumString) 17 | throw new ArgumentException("ExceptionEnumToBooleanConverterParameterMustBeAnEnumName"); 18 | 19 | if (!Enum.IsDefined(typeof(Wpf.Ui.Appearance.ThemeType), value)) 20 | throw new ArgumentException("ExceptionEnumToBooleanConverterValueMustBeAnEnum"); 21 | 22 | var enumValue = Enum.Parse(typeof(Wpf.Ui.Appearance.ThemeType), enumString); 23 | 24 | return enumValue.Equals(value); 25 | } 26 | 27 | public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 28 | { 29 | if (parameter is not String enumString) 30 | throw new ArgumentException("ExceptionEnumToBooleanConverterParameterMustBeAnEnumName"); 31 | 32 | return Enum.Parse(typeof(Wpf.Ui.Appearance.ThemeType), enumString); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Helpers/PathExtension.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing.Drawing2D; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace LeadingCode.RedisPack.Helpers 9 | { 10 | public static class PathExtension 11 | { 12 | public static string ToUnixPath(this string path) 13 | { 14 | path = path.Replace('\\', '/') 15 | .Replace(":", string.Empty); 16 | return $"/{path}"; 17 | } 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Helpers/ServiceCollectionExtensions.cs: -------------------------------------------------------------------------------- 1 | using LeadingCode.RedisPack.Services; 2 | using Microsoft.Extensions.Configuration; 3 | using Microsoft.Extensions.DependencyInjection; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using Microsoft.Extensions.Hosting; 10 | using Microsoft.Extensions.Options; 11 | using System.Windows.Input; 12 | 13 | namespace LeadingCode.RedisPack.Helpers 14 | { 15 | public static class ServiceCollectionExtensions 16 | { 17 | public static void ConfigureWritable( 18 | this IServiceCollection services, 19 | IConfigurationSection section, 20 | string file = "appsettings.json") where T : class, new() 21 | { 22 | services.Configure(section); 23 | services.AddTransient>(provider => 24 | { 25 | var options = provider.GetService>(); 26 | return new WritableOptions(options, section.Key, file); 27 | }); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/LeadingCode.RedisPack.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | WinExe 7 | net7.0-windows 8 | enable 9 | true 10 | true 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | Always 43 | 44 | 45 | Always 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Models/DataColor.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System.Windows.Media; 7 | 8 | namespace LeadingCode.RedisPack.Models; 9 | 10 | public struct DataColor 11 | { 12 | public Brush Color { get; set; } 13 | } 14 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Models/GenerateState.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace LeadingCode.RedisPack.Models 8 | { 9 | public enum GenerateState 10 | { 11 | REDIS_UNZIP_END, 12 | REDIS_COMPILE_END, 13 | INIT 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Models/MsysConfig.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | namespace LeadingCode.RedisPack.Models; 7 | 8 | public class MsysConfig 9 | { 10 | public string BaseDir { get; set; } 11 | 12 | public bool IsInit { get; set; } 13 | } 14 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Models/RedisReleaseInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | 4 | namespace LeadingCode.RedisPack.Models 5 | { 6 | public class RedisReleaseInfo 7 | { 8 | public long Id { get; set; } 9 | 10 | public string Name { get; set; } 11 | 12 | public string tarball_url { get; set; } 13 | 14 | public string zipball_url { get; set; } 15 | 16 | public DateTime published_at { get; set; } 17 | 18 | public string Body => $"https://github.com/redis/redis/releases/tag/{Name}"; 19 | 20 | public string PublishedAt => published_at.ToShortDateString(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/RedisPackModule.cs: -------------------------------------------------------------------------------- 1 | using Autofac.Core; 2 | using LeadingCode.RedisPack.Apis; 3 | using LeadingCode.RedisPack.Services; 4 | using LeadingCode.RedisPack.Views; 5 | using Microsoft.Extensions.DependencyInjection; 6 | using Microsoft.Extensions.Hosting; 7 | using Volo.Abp.Autofac; 8 | using Volo.Abp.Modularity; 9 | using Wpf.Ui.Contracts; 10 | using Wpf.Ui.Services; 11 | 12 | namespace LeadingCode.RedisPack; 13 | 14 | [DependsOn(typeof(AbpAutofacModule))] 15 | public class RedisPackModule : AbpModule 16 | { 17 | public override void ConfigureServices(ServiceConfigurationContext context) 18 | { 19 | context.Services.AddSingleton(); 20 | 21 | //context.Services.AddSingleton(); 22 | 23 | // Theme manipulation 24 | context.Services.AddSingleton(); 25 | 26 | // TaskBar manipulation 27 | context.Services.AddSingleton(); 28 | // Service containing navigation, same as INavigationWindow... but without window 29 | context.Services.AddSingleton(); 30 | context.Services.AddScoped(); 31 | context.Services.AddScoped(); 32 | // Main window with navigation 33 | //context.Services.AddScoped(); 34 | //context.Services.AddScoped(); 35 | 36 | // Views and ViewModels 37 | //context.Services.AddScoped(); 38 | //context.Services.AddScoped(); 39 | //context.Services.AddScoped(); 40 | //context.Services.AddScoped(); 41 | //context.Services.AddScoped(); 42 | //context.Services.AddScoped(); 43 | context.Services.AddHttpApi(); 44 | context.Services.AddHttpApi(); 45 | 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Services/ApplicationHostService.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Linq; 8 | using System.Threading; 9 | using System.Threading.Tasks; 10 | using System.Windows; 11 | using Microsoft.Extensions.Hosting; 12 | using Wpf.Ui.Contracts; 13 | 14 | namespace LeadingCode.RedisPack.Services; 15 | 16 | /// 17 | /// Managed host of the application. 18 | /// 19 | public class ApplicationHostService : IHostedService 20 | { 21 | private readonly IServiceProvider _serviceProvider; 22 | private INavigationWindow _navigationWindow; 23 | 24 | public ApplicationHostService(IServiceProvider serviceProvider) 25 | { 26 | _serviceProvider = serviceProvider; 27 | } 28 | 29 | /// 30 | /// Triggered when the application host is ready to start the service. 31 | /// 32 | /// Indicates that the start process has been aborted. 33 | public async Task StartAsync(CancellationToken cancellationToken) 34 | { 35 | await HandleActivationAsync(); 36 | } 37 | 38 | /// 39 | /// Triggered when the application host is performing a graceful shutdown. 40 | /// 41 | /// Indicates that the shutdown process should no longer be graceful. 42 | public async Task StopAsync(CancellationToken cancellationToken) 43 | { 44 | await Task.CompletedTask; 45 | } 46 | 47 | /// 48 | /// Creates main window during activation. 49 | /// 50 | private async Task HandleActivationAsync() 51 | { 52 | await Task.CompletedTask; 53 | 54 | if (!Application.Current.Windows.OfType().Any()) 55 | { 56 | _navigationWindow = (_serviceProvider.GetService(typeof(INavigationWindow)) as INavigationWindow)!; 57 | _navigationWindow!.ShowWindow(); 58 | 59 | _navigationWindow.Navigate(typeof(Views.Pages.DashboardPage)); 60 | } 61 | 62 | await Task.CompletedTask; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Services/IWritableOptions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Options; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace LeadingCode.RedisPack.Services 9 | { 10 | public interface IWritableOptions : IOptionsSnapshot where T : class, new() 11 | { 12 | void Update(Action applyChanges); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Services/PageService.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Windows; 8 | using Volo.Abp.DependencyInjection; 9 | using Wpf.Ui.Contracts; 10 | 11 | namespace LeadingCode.RedisPack.Services; 12 | 13 | /// 14 | /// Service that provides pages for navigation. 15 | /// 16 | public class PageService : IPageService, ISingletonDependency 17 | { 18 | /// 19 | /// Service which provides the instances of pages. 20 | /// 21 | private readonly IServiceProvider _serviceProvider; 22 | 23 | /// 24 | /// Creates new instance and attaches the . 25 | /// 26 | public PageService(IServiceProvider serviceProvider) 27 | { 28 | _serviceProvider = serviceProvider; 29 | } 30 | 31 | /// 32 | public T? GetPage() where T : class 33 | { 34 | if (!typeof(FrameworkElement).IsAssignableFrom(typeof(T))) 35 | throw new InvalidOperationException("The page should be a WPF control."); 36 | 37 | return (T?)_serviceProvider.GetService(typeof(T)); 38 | } 39 | 40 | /// 41 | public FrameworkElement? GetPage(Type pageType) 42 | { 43 | if (!typeof(FrameworkElement).IsAssignableFrom(pageType)) 44 | throw new InvalidOperationException("The page should be a WPF control."); 45 | 46 | return _serviceProvider.GetService(pageType) as FrameworkElement; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Services/WritableOptions.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Hosting; 2 | using Microsoft.Extensions.Options; 3 | using Newtonsoft.Json.Linq; 4 | using Newtonsoft.Json; 5 | using System; 6 | using System.IO; 7 | 8 | namespace LeadingCode.RedisPack.Services 9 | { 10 | public class WritableOptions : IWritableOptions where T : class, new() 11 | { 12 | private readonly IOptionsMonitor _options; 13 | private readonly string _section; 14 | private readonly string _file; 15 | public WritableOptions( 16 | IOptionsMonitor options, 17 | string section, 18 | string file) 19 | { 20 | _options = options; 21 | _section = section; 22 | _file = file; 23 | } 24 | public T Value => _options.CurrentValue; 25 | public T Get(string name) => _options.Get(name); 26 | public void Update(Action applyChanges) 27 | { 28 | var physicalPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _file) ; 29 | var jObject = JsonConvert.DeserializeObject(File.ReadAllText(physicalPath)); 30 | var sectionObject = jObject.TryGetValue(_section, out JToken section) ? 31 | JsonConvert.DeserializeObject(section.ToString()) : (Value ?? new T()); 32 | applyChanges(sectionObject); 33 | jObject[_section] = JObject.Parse(JsonConvert.SerializeObject(sectionObject)); 34 | File.WriteAllText(physicalPath, JsonConvert.SerializeObject(jObject, Formatting.Indented)); 35 | } 36 | } 37 | 38 | 39 | } 40 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/ViewModels/DashboardViewModel.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Diagnostics.Metrics; 8 | using System.Reflection; 9 | using System.Windows.Input; 10 | using CommunityToolkit.Mvvm.ComponentModel; 11 | using CommunityToolkit.Mvvm.Input; 12 | using Volo.Abp.DependencyInjection; 13 | using Wpf.Ui.Common; 14 | 15 | namespace LeadingCode.RedisPack.ViewModels; 16 | 17 | public partial class DashboardViewModel : ObservableObject, IScopedDependency 18 | { 19 | [ObservableProperty] 20 | private string _cmd1 = "pacman -Syu"; 21 | 22 | [ObservableProperty] 23 | private string _cmd2 = "pacman -Sy gcc make pkg-config"; 24 | 25 | [ObservableProperty] 26 | private string _cmd3 = "tar -xvf redis.tar.gz"; 27 | 28 | [ObservableProperty] private string _cmd4 = "cd /d/docments/redistest/redis-7.0.10"; 29 | 30 | [ObservableProperty] private string _cmd5 = "make PREFIX=/d/redis/dist install"; 31 | 32 | [ObservableProperty] private string _cmd6 = "redis-server.exe redis.con"; 33 | 34 | public DashboardViewModel() 35 | { 36 | 37 | } 38 | 39 | [RelayCommand] 40 | private void OnCopy(string index) 41 | { 42 | switch (index) 43 | { 44 | case "1": 45 | Clipboard.SetText(_cmd1); 46 | break; 47 | case "2": 48 | Clipboard.SetText(_cmd2); 49 | break; 50 | case "3": 51 | Clipboard.SetText(_cmd3); 52 | break; 53 | case "4": 54 | Clipboard.SetText(_cmd4); 55 | break; 56 | case "5": 57 | Clipboard.SetText(_cmd5); 58 | break; 59 | case "6": 60 | Clipboard.SetText(_cmd6); 61 | break; 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/ViewModels/GenerateViewModel.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | using System.Diagnostics.Metrics; 9 | using System.IO; 10 | using System.Threading; 11 | using System.Threading.Tasks; 12 | using System.Windows.Controls; 13 | using System.Windows; 14 | using System.Windows.Forms; 15 | using CommunityToolkit.Mvvm.ComponentModel; 16 | using CommunityToolkit.Mvvm.Input; 17 | using LeadingCode.RedisPack.Apis; 18 | using LeadingCode.RedisPack.Models; 19 | using Volo.Abp.DependencyInjection; 20 | using Wpf.Ui.Contracts; 21 | using Wpf.Ui.Controls; 22 | using Wpf.Ui.Controls.Navigation; 23 | using HorizontalAlignment = System.Windows.HorizontalAlignment; 24 | using Wpf.Ui.Common; 25 | using System.Diagnostics; 26 | using System.Linq; 27 | using System.Net.Http; 28 | using System.Windows.Threading; 29 | using LeadingCode.RedisPack.Helpers; 30 | using LeadingCode.RedisPack.Services; 31 | using Microsoft.Extensions.Configuration; 32 | 33 | namespace LeadingCode.RedisPack.ViewModels; 34 | 35 | public partial class GenerateViewModel : ObservableObject, INavigationAware, IScopedDependency 36 | { 37 | private bool _isInitialized = false; 38 | private readonly IGithubRedisApi _githubRedisApi; 39 | private readonly IGithubRedisFileApi _githubRedisFileApi; 40 | private readonly IDialogService _dialogService; 41 | private readonly ISnackbarService _snackbarService; 42 | private readonly IConfiguration _configuration; 43 | private readonly IWritableOptions _appConfig; 44 | DispatcherTimer _timer; 45 | private GenerateState _state = GenerateState.INIT; 46 | private string _tempDir = string.Empty; 47 | private string _redisDistDir = string.Empty; 48 | private string _redisUnzipDir = string.Empty; 49 | private IDialogControl _rootDialog; 50 | 51 | [ObservableProperty] 52 | private IEnumerable _colors; 53 | 54 | [ObservableProperty] private RedisReleaseInfo? _redisReleaseInfo; 55 | 56 | [ObservableProperty] 57 | private IEnumerable _redisReleaseInfos; 58 | 59 | [ObservableProperty] 60 | private string _redisTagName; 61 | 62 | [ObservableProperty] 63 | private string _msysDir = string.Empty; 64 | 65 | [ObservableProperty] 66 | private string _redisDir = string.Empty; 67 | 68 | [ObservableProperty] 69 | private bool _isInit = false; 70 | 71 | public GenerateViewModel(IGithubRedisApi githubRedisApi, IDialogService dialogService, ISnackbarService snackbarService, IGithubRedisFileApi githubRedisFileApi, IConfiguration configuration, IWritableOptions appConfig) 72 | { 73 | _githubRedisApi = githubRedisApi; 74 | _dialogService = dialogService; 75 | _snackbarService = snackbarService; 76 | _githubRedisFileApi = githubRedisFileApi; 77 | _configuration = configuration; 78 | _appConfig = appConfig; 79 | } 80 | 81 | public void OnNavigatedTo() 82 | { 83 | if (!_isInitialized) 84 | InitializeViewModel(); 85 | } 86 | 87 | public void OnNavigatedFrom() 88 | { 89 | } 90 | 91 | private void InitializeViewModel() 92 | { 93 | IsInit = _appConfig.Value.IsInit; 94 | if (!_appConfig.Value.IsInit) MsysDir = _appConfig.Value.BaseDir; 95 | _rootDialog = _dialogService.GetDialogControl(); 96 | 97 | _rootDialog.DialogHeight = 160; 98 | _rootDialog.Footer = new TextBlock 99 | { 100 | Margin = new Thickness(0, 10, 0, 10), 101 | HorizontalAlignment = HorizontalAlignment.Center, 102 | TextWrapping = TextWrapping.WrapWithOverflow, 103 | Text = "加载中...", 104 | }; 105 | 106 | _rootDialog.Content = new ProgressRing 107 | { 108 | IsIndeterminate = true, 109 | VerticalAlignment = VerticalAlignment.Center, 110 | }; 111 | 112 | _isInitialized = true; 113 | } 114 | 115 | [RelayCommand] 116 | private async Task OnGetRedisTags() 117 | { 118 | 119 | _rootDialog.Show(); 120 | var list = await _githubRedisApi.GetAsync(); 121 | RedisReleaseInfos = list.OrderByDescending(a => a.Name).ToList(); 122 | _rootDialog.Hide(); 123 | } 124 | 125 | [RelayCommand] 126 | private void OnOpenDir(string type) 127 | { 128 | var folderBrowserDialog = new FolderBrowserDialog(); 129 | folderBrowserDialog.ShowDialog(); 130 | switch (type) 131 | { 132 | case "msys": 133 | MsysDir = folderBrowserDialog.SelectedPath; 134 | break; 135 | case "save": 136 | RedisDir = folderBrowserDialog.SelectedPath; 137 | break; 138 | } 139 | } 140 | 141 | [RelayCommand] 142 | private void OnGenerate() 143 | { 144 | _rootDialog.Show(); 145 | _tempDir = Path.Combine(RedisDir, "Temp"); 146 | CopyDlfcn(); 147 | DownloadRedis(); 148 | UnZipRedisFile(); 149 | } 150 | 151 | [RelayCommand] 152 | private void OnUpdateMSYSData() 153 | { 154 | _rootDialog.Show(); 155 | ExecuteCmd("pacman -Syu"); 156 | } 157 | 158 | [RelayCommand] 159 | private void OnAddPkg() 160 | { 161 | _rootDialog.Show(); 162 | ExecuteCmd("echo y | pacman -Sy gcc make pkg-config"); 163 | } 164 | 165 | private void ExecuteCmd(string arguments, string? workdir = null) 166 | { 167 | var startInfo = new ProcessStartInfo 168 | { 169 | FileName = Path.Combine(MsysDir, "msys2.exe"), 170 | Arguments = arguments, 171 | WorkingDirectory = workdir ?? MsysDir, 172 | RedirectStandardInput = true, 173 | RedirectStandardOutput = true, 174 | RedirectStandardError = true, 175 | UseShellExecute = false, 176 | Verb = "RunAs" 177 | }; 178 | var process = new Process(); 179 | process.StartInfo = startInfo; 180 | process.Start(); 181 | process.StandardInput.AutoFlush = true; 182 | process.WaitForExit(); 183 | process.Close(); 184 | Thread.Sleep(500); 185 | _timer = new DispatcherTimer 186 | { 187 | Interval = TimeSpan.FromSeconds(1) 188 | }; 189 | _timer.Tick += SyuTimerTick; 190 | _timer.Start(); 191 | } 192 | 193 | void SyuTimerTick(object sender, EventArgs e) 194 | { 195 | var isClosed = Process.GetProcessesByName("mintty").Length == 0; 196 | if (!isClosed) return; 197 | _timer.Stop(); 198 | switch (_state) 199 | { 200 | case GenerateState.INIT: 201 | _rootDialog.Hide(); 202 | _snackbarService.Show("配置成功", $"MSYS配置成功。", SymbolRegular.Checkmark12, ControlAppearance.Success); 203 | _appConfig.Update(opt => 204 | { 205 | opt.IsInit = false; 206 | opt.BaseDir = MsysDir; 207 | }); 208 | break; 209 | case GenerateState.REDIS_UNZIP_END: 210 | CompileRedis(); 211 | break; 212 | case GenerateState.REDIS_COMPILE_END: 213 | CopyOtherRedisFile(); 214 | _rootDialog.Hide(); 215 | _snackbarService.Show("编译成功", $"文件已保存在{_redisDistDir}中,请查阅。", SymbolRegular.Checkmark12, ControlAppearance.Success); 216 | break; 217 | default: 218 | throw new ArgumentOutOfRangeException(); 219 | } 220 | } 221 | 222 | void DownloadRedis() 223 | { 224 | var response = _githubRedisFileApi.DownloadAsync($"{RedisTagName}.tar.gz").Result; 225 | if (!Directory.Exists(_tempDir)) Directory.CreateDirectory(_tempDir); 226 | var filePath = Path.Combine(_tempDir, $"{RedisTagName}.tar.gz"); 227 | using var fileStream = File.OpenWrite(filePath); 228 | response.SaveAsAsync(fileStream).Wait(); 229 | } 230 | 231 | void UnZipRedisFile() 232 | { 233 | _state = GenerateState.REDIS_UNZIP_END; 234 | var cmd = $"tar -xvf {RedisTagName}.tar.gz"; 235 | ExecuteCmd(cmd, _tempDir); 236 | } 237 | 238 | void CopyDlfcn() 239 | { 240 | var source = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "dlfcn.h"); 241 | var target = Path.Combine(MsysDir, "usr", "include", "dlfcn.h"); 242 | File.Copy(source, target, true); 243 | } 244 | 245 | void CompileRedis() 246 | { 247 | _state = GenerateState.REDIS_COMPILE_END; 248 | _redisDistDir = Path.Combine(RedisDir, $"dist-{RedisTagName}"); 249 | var cmd = $"make PREFIX={_redisDistDir.ToUnixPath()} install"; 250 | _redisUnzipDir = Path.Combine(_tempDir, $"redis-{RedisTagName}"); 251 | ExecuteCmd(cmd, _redisUnzipDir); 252 | } 253 | 254 | void CopyOtherRedisFile() 255 | { 256 | //msys-2.0.dll 257 | var msysSource = Path.Combine(MsysDir, "usr", "bin", "msys-2.0.dll"); 258 | var msysTarget = Path.Combine(_redisDistDir, "bin", "msys-2.0.dll"); 259 | File.Copy(msysSource, msysTarget, true); 260 | 261 | //redis.conf 262 | var redisConfSource = Path.Combine(_redisUnzipDir, "redis.conf"); 263 | var redisConfTarget = Path.Combine(_redisDistDir, "bin", "redis.conf"); 264 | File.Copy(redisConfSource, redisConfTarget, true); 265 | 266 | //sentinel.conf 267 | var sentinelConfSource = Path.Combine(_redisUnzipDir, "sentinel.conf"); 268 | var sentinelConfTarget = Path.Combine(_redisDistDir, "bin", "sentinel.conf"); 269 | File.Copy(sentinelConfSource, sentinelConfTarget, true); 270 | } 271 | } 272 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/ViewModels/MainWindowViewModel.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using System.Collections.Generic; 8 | using System.Collections.ObjectModel; 9 | using System.Windows; 10 | using CommunityToolkit.Mvvm.ComponentModel; 11 | using Volo.Abp.DependencyInjection; 12 | using Wpf.Ui.Common; 13 | using Wpf.Ui.Contracts; 14 | using Wpf.Ui.Controls; 15 | using Wpf.Ui.Controls.Navigation; 16 | 17 | namespace LeadingCode.RedisPack.ViewModels; 18 | 19 | public partial class MainWindowViewModel : ObservableObject, IScopedDependency 20 | { 21 | private bool _isInitialized = false; 22 | 23 | [ObservableProperty] 24 | private string _applicationTitle = String.Empty; 25 | 26 | [ObservableProperty] 27 | private ObservableCollection _navigationItems = new(); 28 | 29 | [ObservableProperty] 30 | private ObservableCollection _navigationFooter = new(); 31 | 32 | [ObservableProperty] 33 | private ObservableCollection _trayMenuItems = new(); 34 | 35 | public MainWindowViewModel(INavigationService navigationService) 36 | { 37 | if (!_isInitialized) 38 | InitializeViewModel(); 39 | } 40 | 41 | private void InitializeViewModel() 42 | { 43 | ApplicationTitle = "Windows Redis包编译器"; 44 | 45 | NavigationItems = new ObservableCollection 46 | { 47 | new NavigationViewItem() 48 | { 49 | Content = "自动生成", 50 | Icon = new SymbolIcon { Symbol = SymbolRegular.DataHistogram24 }, 51 | TargetPageType = typeof(Views.Pages.GeneratePage) 52 | }, 53 | new NavigationViewItem() 54 | { 55 | Content = "手动生成", 56 | Icon = new SymbolIcon { Symbol = SymbolRegular.Home24 }, 57 | TargetPageType = typeof(Views.Pages.DashboardPage) 58 | }, 59 | new NavigationViewItem() 60 | { 61 | Content = "Redis版本", 62 | Icon = new SymbolIcon{Symbol = SymbolRegular.AlignSpaceEvenlyVertical20}, 63 | TargetPageType = typeof(Views.Pages.RedisReleasePage) 64 | } 65 | }; 66 | var toggleThemeNavigationViewItem = new NavigationViewItem 67 | { 68 | Content = "主题切换", 69 | Icon = new SymbolIcon { Symbol = SymbolRegular.PaintBrush24 } 70 | }; 71 | toggleThemeNavigationViewItem.Click += OnToggleThemeClicked; 72 | NavigationFooter = new ObservableCollection 73 | { 74 | 75 | new NavigationViewItem() 76 | { 77 | Content = "系统设置", 78 | Icon = new SymbolIcon { Symbol = SymbolRegular.Settings24 }, 79 | TargetPageType = typeof(Views.Pages.SettingsPage) 80 | } 81 | }; 82 | NavigationFooter.AddFirst(toggleThemeNavigationViewItem); 83 | TrayMenuItems = new ObservableCollection 84 | { 85 | new MenuItem 86 | { 87 | Header = "Home", 88 | Tag = "tray_home" 89 | } 90 | }; 91 | 92 | _isInitialized = true; 93 | } 94 | 95 | private void OnToggleThemeClicked(object sender, RoutedEventArgs e) 96 | { 97 | var currentTheme = Wpf.Ui.Appearance.Theme.GetAppTheme(); 98 | 99 | Wpf.Ui.Appearance.Theme.Apply(currentTheme == Wpf.Ui.Appearance.ThemeType.Light ? Wpf.Ui.Appearance.ThemeType.Dark : Wpf.Ui.Appearance.ThemeType.Light); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/ViewModels/RedisReleaseViewModel.cs: -------------------------------------------------------------------------------- 1 | using CommunityToolkit.Mvvm.ComponentModel; 2 | using LeadingCode.RedisPack.Apis; 3 | using LeadingCode.RedisPack.Models; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Windows.Controls; 7 | using System.Windows; 8 | using Volo.Abp.DependencyInjection; 9 | using Wpf.Ui.Controls; 10 | using Wpf.Ui.Controls.Navigation; 11 | using Wpf.Ui.Contracts; 12 | using System.Windows.Documents; 13 | 14 | namespace LeadingCode.RedisPack.ViewModels 15 | { 16 | public partial class RedisReleaseViewModel : ObservableObject,INavigationAware, IScopedDependency 17 | { 18 | private bool _isInitialized = false; 19 | private readonly IGithubRedisApi _githubRedisApi; 20 | private readonly IDialogService _dialogService; 21 | public IDialogControl RootDialog; 22 | 23 | 24 | [ObservableProperty] 25 | private IEnumerable _redisReleaseInfos; 26 | 27 | public RedisReleaseViewModel(IGithubRedisApi githubRedisApi, 28 | IDialogService dialogService) 29 | { 30 | _githubRedisApi = githubRedisApi; 31 | _dialogService = dialogService; 32 | 33 | 34 | } 35 | 36 | 37 | public void OnNavigatedTo() 38 | { 39 | if (!_isInitialized) InitializeViewModel(); 40 | } 41 | 42 | public void OnNavigatedFrom() 43 | { 44 | } 45 | 46 | private void InitializeViewModel() 47 | { 48 | RootDialog = _dialogService.GetDialogControl(); 49 | RootDialog.DialogHeight = 160; 50 | RootDialog.Footer = new TextBlock 51 | { 52 | Margin = new Thickness(0, 10, 0, 10), 53 | HorizontalAlignment = HorizontalAlignment.Center, 54 | TextWrapping = TextWrapping.WrapWithOverflow, 55 | Text = "加载中...", 56 | }; 57 | 58 | RootDialog.Content = new ProgressRing 59 | { 60 | IsIndeterminate = true, 61 | VerticalAlignment = VerticalAlignment.Center, 62 | }; 63 | 64 | _isInitialized = true; 65 | } 66 | 67 | public void GetRedisList() 68 | { 69 | var list = _githubRedisApi.GetAsync().Result; 70 | RedisReleaseInfos = list.OrderByDescending(a => a.Name).ToList(); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/ViewModels/SettingsViewModel.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using System; 7 | using CommunityToolkit.Mvvm.ComponentModel; 8 | using CommunityToolkit.Mvvm.Input; 9 | using Volo.Abp.DependencyInjection; 10 | using Wpf.Ui.Controls.Navigation; 11 | 12 | namespace LeadingCode.RedisPack.ViewModels; 13 | 14 | public partial class SettingsViewModel : ObservableObject, INavigationAware, IScopedDependency 15 | { 16 | private bool _isInitialized = false; 17 | 18 | [ObservableProperty] 19 | private string _appVersion = String.Empty; 20 | 21 | [ObservableProperty] 22 | private Wpf.Ui.Appearance.ThemeType _currentTheme = Wpf.Ui.Appearance.ThemeType.Unknown; 23 | 24 | public void OnNavigatedTo() 25 | { 26 | if (!_isInitialized) 27 | InitializeViewModel(); 28 | } 29 | 30 | public void OnNavigatedFrom() 31 | { 32 | } 33 | 34 | private void InitializeViewModel() 35 | { 36 | CurrentTheme = Wpf.Ui.Appearance.Theme.GetAppTheme(); 37 | AppVersion = $"LeadingCode - {GetAssemblyVersion()}"; 38 | 39 | _isInitialized = true; 40 | } 41 | 42 | private string GetAssemblyVersion() 43 | { 44 | return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? String.Empty; 45 | } 46 | 47 | [RelayCommand] 48 | private void OnChangeTheme(string parameter) 49 | { 50 | switch (parameter) 51 | { 52 | case "theme_light": 53 | if (CurrentTheme == Wpf.Ui.Appearance.ThemeType.Light) 54 | break; 55 | 56 | Wpf.Ui.Appearance.Theme.Apply(Wpf.Ui.Appearance.ThemeType.Light); 57 | CurrentTheme = Wpf.Ui.Appearance.ThemeType.Light; 58 | 59 | break; 60 | 61 | default: 62 | if (CurrentTheme == Wpf.Ui.Appearance.ThemeType.Dark) 63 | break; 64 | 65 | Wpf.Ui.Appearance.Theme.Apply(Wpf.Ui.Appearance.ThemeType.Dark); 66 | CurrentTheme = Wpf.Ui.Appearance.ThemeType.Dark; 67 | 68 | break; 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  25 | 26 | 27 | 28 | 29 | 30 | 31 | 36 | 37 | 42 | 43 | 44 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 63 | 67 | 68 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using LeadingCode.RedisPack.Views.Pages; 7 | using System; 8 | using System.Windows; 9 | using Wpf.Ui.Contracts; 10 | using Wpf.Ui.Controls.Navigation; 11 | 12 | namespace LeadingCode.RedisPack.Views; 13 | 14 | /// 15 | /// Interaction logic for MainWindow.xaml 16 | /// 17 | public partial class MainWindow : INavigationWindow 18 | { 19 | public ViewModels.MainWindowViewModel ViewModel 20 | { 21 | get; 22 | } 23 | 24 | public MainWindow(ViewModels.MainWindowViewModel viewModel, 25 | IPageService pageService, 26 | INavigationService navigationService, 27 | ISnackbarService snackbarService, 28 | IDialogService dialogService) 29 | { 30 | ViewModel = viewModel; 31 | DataContext = this; 32 | 33 | Wpf.Ui.Appearance.Watcher.Watch(this); 34 | 35 | InitializeComponent(); 36 | SetPageService(pageService); 37 | 38 | snackbarService.SetSnackbarControl(RootSnackbar); 39 | dialogService.SetDialogControl(RootDialog); 40 | navigationService.SetNavigationControl(RootNavigation); 41 | RootNavigation.Loaded += (_, _) => RootNavigation.Navigate(typeof(GeneratePage)); 42 | } 43 | 44 | #region INavigationWindow methods 45 | 46 | public INavigationView GetNavigation() 47 | => RootNavigation; 48 | 49 | public bool Navigate(Type pageType) 50 | => RootNavigation.Navigate(pageType); 51 | 52 | public void SetPageService(IPageService pageService) 53 | => RootNavigation.SetPageService(pageService); 54 | 55 | public void ShowWindow() 56 | => Show(); 57 | 58 | public void CloseWindow() 59 | => Close(); 60 | 61 | #endregion INavigationWindow methods 62 | 63 | /// 64 | /// Raises the closed event. 65 | /// 66 | protected override void OnClosed(EventArgs e) 67 | { 68 | base.OnClosed(e); 69 | 70 | // Make sure that closing this window will begin the process of closing the application. 71 | Application.Current.Shutdown(); 72 | } 73 | 74 | INavigationView INavigationWindow.GetNavigation() 75 | { 76 | throw new NotImplementedException(); 77 | } 78 | 79 | public void SetServiceProvider(IServiceProvider serviceProvider) 80 | { 81 | throw new NotImplementedException(); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/DashboardPage.xaml: -------------------------------------------------------------------------------- 1 |  18 | 19 | 20 | 21 | 25 | 26 | 32 | 33 | Download MSYS2 34 | 35 | 40 | 46 | 47 | 52 | 58 | 63 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 80 | 88 | 89 | 90 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 107 | 115 | 116 | 117 | 123 | 124 | 125 | 130 | 136 | 141 | 147 | 148 | 149 | 150 | 155 | 161 | 162 | Github Redis 163 | 164 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 181 | 189 | 190 | 191 | 192 | 193 | 198 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 215 | 223 | 224 | 225 | 230 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 247 | 255 | 256 | 257 | 262 | 268 | 273 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 299 | 306 | 307 | 311 | 318 | 325 | 326 | 330 | 337 | 344 | 345 | 346 | 352 | 357 | 358 | 359 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 375 | 383 | 384 | 385 | 386 | 387 | 404 | 405 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/DashboardPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using Volo.Abp.DependencyInjection; 7 | using Wpf.Ui.Controls.Navigation; 8 | 9 | namespace LeadingCode.RedisPack.Views.Pages; 10 | 11 | /// 12 | /// Interaction logic for DashboardPage.xaml 13 | /// 14 | public partial class DashboardPage : INavigableView, IScopedDependency 15 | { 16 | public ViewModels.DashboardViewModel ViewModel 17 | { 18 | get; 19 | } 20 | 21 | public DashboardPage(ViewModels.DashboardViewModel viewModel) 22 | { 23 | ViewModel = viewModel; 24 | DataContext = this; 25 | 26 | InitializeComponent(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/GeneratePage.xaml: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 27 | 28 | Download MSYS2 29 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 56 | 62 | 71 | 72 | 83 | 94 | 95 | 96 | 97 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 134 | 135 | 142 | 151 | 159 | 166 | 173 | 178 | 187 | 198 | 199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/GeneratePage.xaml.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using Volo.Abp.DependencyInjection; 7 | using Wpf.Ui.Contracts; 8 | using Wpf.Ui.Controls.Navigation; 9 | using Wpf.Ui.Services; 10 | 11 | namespace LeadingCode.RedisPack.Views.Pages; 12 | 13 | /// 14 | /// Interaction logic for DataView.xaml 15 | /// 16 | public partial class GeneratePage : INavigableView, IScopedDependency 17 | { 18 | public ViewModels.GenerateViewModel ViewModel 19 | { 20 | get; 21 | } 22 | 23 | public GeneratePage(ViewModels.GenerateViewModel viewModel) 24 | { 25 | ViewModel = viewModel; 26 | DataContext = this; 27 | 28 | InitializeComponent(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/RedisReleasePage.xaml: -------------------------------------------------------------------------------- 1 |  20 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 50 | 56 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/RedisReleasePage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | using System.Windows.Controls; 9 | using System.Windows.Data; 10 | using System.Windows.Documents; 11 | using System.Windows.Input; 12 | using System.Windows.Media; 13 | using System.Windows.Media.Imaging; 14 | using System.Windows.Navigation; 15 | using System.Windows.Shapes; 16 | using LeadingCode.RedisPack.ViewModels; 17 | using Volo.Abp.DependencyInjection; 18 | using Wpf.Ui.Controls.Navigation; 19 | 20 | namespace LeadingCode.RedisPack.Views.Pages 21 | { 22 | /// 23 | /// RedisReleasePage.xaml 的交互逻辑 24 | /// 25 | public partial class RedisReleasePage : INavigableView, IScopedDependency 26 | { 27 | 28 | public RedisReleaseViewModel ViewModel 29 | { 30 | get; 31 | } 32 | 33 | public RedisReleasePage(ViewModels.RedisReleaseViewModel viewModel) 34 | { 35 | ViewModel = viewModel; 36 | DataContext = this; 37 | InitializeComponent(); 38 | } 39 | 40 | private void RedisReleasePage_OnLoaded(object sender, RoutedEventArgs e) 41 | { 42 | var loads = this.Dispatcher.BeginInvoke(ViewModel.GetRedisList); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/SettingsPage.xaml: -------------------------------------------------------------------------------- 1 |  19 | 20 | 21 | 22 | 23 | 24 | 28 | 35 | 42 | 43 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/Views/Pages/SettingsPage.xaml.cs: -------------------------------------------------------------------------------- 1 | // This Source Code Form is subject to the terms of the MIT License. 2 | // If a copy of the MIT was not distributed with this file, You can obtain one at https://opensource.org/licenses/MIT. 3 | // Copyright (C) Leszek Pomianowski and WPF UI Contributors. 4 | // All Rights Reserved. 5 | 6 | using Volo.Abp.DependencyInjection; 7 | using Wpf.Ui.Controls.Navigation; 8 | 9 | namespace LeadingCode.RedisPack.Views.Pages; 10 | 11 | /// 12 | /// Interaction logic for SettingsPage.xaml 13 | /// 14 | public partial class SettingsPage : INavigableView, IScopedDependency 15 | { 16 | public ViewModels.SettingsViewModel ViewModel 17 | { 18 | get; 19 | } 20 | 21 | public SettingsPage(ViewModels.SettingsViewModel viewModel) 22 | { 23 | ViewModel = viewModel; 24 | DataContext = this; 25 | 26 | InitializeComponent(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "MSYS": { 3 | "IsInit": true, 4 | "BaseDir": "" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/appsettings.secrets.json: -------------------------------------------------------------------------------- 1 | { 2 | } -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/dlfcn.h: -------------------------------------------------------------------------------- 1 | /* dlfcn.h 2 | 3 | This file is part of Cygwin. 4 | 5 | This software is a copyrighted work licensed under the terms of the 6 | Cygwin license. Please consult the file "CYGWIN_LICENSE" for 7 | details. */ 8 | 9 | #ifndef _DLFCN_H 10 | #define _DLFCN_H 11 | 12 | #include 13 | #include 14 | 15 | #ifdef __cplusplus 16 | extern "C" { 17 | #endif 18 | 19 | /* declarations used for dynamic linking support routines */ 20 | extern void *dlopen (const char *, int); 21 | extern void *dlsym (void *, const char *); 22 | extern int dlclose (void *); 23 | extern char *dlerror (void); 24 | 25 | /* specific to CYGWIN */ 26 | #define FORK_RELOAD 1 27 | #define FORK_NO_RELOAD 0 28 | 29 | extern void dlfork (int); 30 | 31 | /* following doesn't exist in Win32 API .... */ 32 | #define RTLD_DEFAULT NULL 33 | 34 | /* valid values for mode argument to dlopen */ 35 | #define RTLD_LOCAL 0 /* Symbols in this dlopen'ed obj are not */ 36 | /* visible to other dlopen'ed objs. */ 37 | #define RTLD_LAZY 1 /* Lazy function call binding. */ 38 | #define RTLD_NOW 2 /* Immediate function call binding. */ 39 | #define RTLD_GLOBAL 4 /* Symbols in this dlopen'ed obj are visible */ 40 | /* to other dlopen'ed objs. */ 41 | /* Non-standard GLIBC extensions */ 42 | #define RTLD_NODELETE 8 /* Don't unload lib in dlcose. */ 43 | #define RTLD_NOLOAD 16 /* Don't load lib, just return handle if lib */ 44 | /* is already loaded, NULL otherwise. */ 45 | #define RTLD_DEEPBIND 32 /* Place lookup scope so that this lib is */ 46 | /* preferred over global scope. */ 47 | 48 | 49 | // #if __GNU_VISIBLE 50 | typedef struct Dl_info Dl_info; 51 | 52 | struct Dl_info 53 | { 54 | char dli_fname[PATH_MAX]; /* Filename of defining object */ 55 | void *dli_fbase; /* Load address of that object */ 56 | const char *dli_sname; /* Name of nearest lower symbol */ 57 | void *dli_saddr; /* Exact value of nearest symbol */ 58 | }; 59 | 60 | extern int dladdr (const void *addr, Dl_info *info); 61 | // #endif 62 | 63 | #ifdef __cplusplus 64 | } 65 | #endif 66 | 67 | #endif /* _DLFCN_H */ 68 | -------------------------------------------------------------------------------- /src/LeadingCode.RedisPack/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CacoCode/LeadingCode.RedisPack/ef42c1c187196645f644159b198cc7d9dcf6aae3/src/LeadingCode.RedisPack/logo.ico --------------------------------------------------------------------------------