├── RobloxLatestClientDownloader
├── ClientDownloadLogo.ico
├── ClientDownloadLogo.png
├── App.xaml.cs
├── App.xaml
├── AssemblyInfo.cs
├── RobloxLatestClientDownloader.csproj
├── MainWindow.xaml
└── MainWindow.xaml.cs
├── README.md
├── RobloxLatestClientDownloader.sln
└── .gitignore
/RobloxLatestClientDownloader/ClientDownloadLogo.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShouxTech/RobloxLatestClientDownloader/HEAD/RobloxLatestClientDownloader/ClientDownloadLogo.ico
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/ClientDownloadLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ShouxTech/RobloxLatestClientDownloader/HEAD/RobloxLatestClientDownloader/ClientDownloadLogo.png
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 |
9 | namespace RobloxLatestClientDownloader {
10 | ///
11 | /// Interaction logic for App.xaml
12 | ///
13 | public partial class App : Application {
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/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 | )]
11 |
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/RobloxLatestClientDownloader.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | WinExe
5 | net6.0-windows
6 | enable
7 | true
8 | ClientDownloadLogo.ico
9 | ClientDownloadLogo.png
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | True
23 | \
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Roblox Client Downloader
2 |
3 | This application downloads the latest available release of the Roblox client. This is different from the regular official release as it is typically pushed by Roblox a day or a few days before Roblox officially updates their client and forces every user to download it.
4 |
5 | [Video](https://streamable.com/k9opp5)
6 |
7 | 
8 |
9 | ## How does it work?
10 |
11 | Roblox has their deploy logs [here](http://setup.roblox.com/DeployHistory.txt). This application checks for the latest WindowsPlayer version and allows you to download it or replace it directly into your Roblox versions folder (Only works if you have Roblox installed in local appdata, but if you have Roblox installed somewhere else, you can still download the zip and put the Roblox client executable into your Roblox/Versions/version-xxx directory)
12 |
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.1.31911.260
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RobloxLatestClientDownloader", "RobloxLatestClientDownloader\RobloxLatestClientDownloader.csproj", "{9D218C22-7FDD-41D2-A83A-4DB4F0759CAE}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {9D218C22-7FDD-41D2-A83A-4DB4F0759CAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {9D218C22-7FDD-41D2-A83A-4DB4F0759CAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {9D218C22-7FDD-41D2-A83A-4DB4F0759CAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {9D218C22-7FDD-41D2-A83A-4DB4F0759CAE}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {4B37B31A-5DD8-4010-9E30-47BBF839D20F}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/MainWindow.xaml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/RobloxLatestClientDownloader/MainWindow.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.IO.Compression;
5 | using System.Linq;
6 | using System.Net;
7 | using System.Net.Http;
8 | using System.Text;
9 | using System.Text.RegularExpressions;
10 | using System.Threading.Tasks;
11 | using System.Windows;
12 | using System.Windows.Controls;
13 | using System.Windows.Data;
14 | using System.Windows.Documents;
15 | using System.Windows.Input;
16 | using System.Windows.Media;
17 | using System.Windows.Media.Imaging;
18 | using System.Windows.Navigation;
19 | using System.Windows.Shapes;
20 |
21 | namespace RobloxLatestClientDownloader {
22 | public partial class MainWindow : Window {
23 | private const string robloxClientName = "RobloxPlayerBeta.exe";
24 |
25 | private string currentRobloxVersion;
26 | private string availableRobloxVersion;
27 |
28 | public MainWindow() {
29 | InitializeComponent();
30 |
31 | currentRobloxVersion = GetCurrentRobloxVersion();
32 | availableRobloxVersion = GetAvailableRobloxVersion();
33 |
34 | SetLatestVersionLabel();
35 | SetAvailableVersionLabel();
36 | }
37 |
38 | private string GetCurrentRobloxVersion() {
39 | if (!string.IsNullOrEmpty(currentRobloxVersion)) {
40 | return currentRobloxVersion;
41 | }
42 |
43 | using (HttpClient client = new HttpClient()) {
44 | return client.GetStringAsync("http://setup.roblox.com/version").Result;
45 | }
46 | }
47 |
48 | private string GetWindowsPlayerLineFromAllVersionLines(string[] allVersionLines, int index) {
49 | string line = allVersionLines[index];
50 |
51 | if (!line.Contains("WindowsPlayer")) {
52 | return GetWindowsPlayerLineFromAllVersionLines(allVersionLines, index - 1);
53 | }
54 |
55 | return line;
56 | }
57 |
58 | private string GetAvailableRobloxVersion() {
59 | if (!string.IsNullOrEmpty(availableRobloxVersion)) {
60 | return availableRobloxVersion;
61 | }
62 |
63 | using (HttpClient httpClient = new HttpClient()) {
64 | string allVersions = httpClient.GetStringAsync("http://setup.roblox.com/DeployHistory.txt").Result;
65 | string[] lines = allVersions.Split('\n');
66 | string versionLine = GetWindowsPlayerLineFromAllVersionLines(lines, lines.Length - 1);
67 | MatchCollection regexMatch = Regex.Matches(versionLine, "version-\\S+");
68 | return regexMatch[0].Value;
69 | }
70 | }
71 |
72 | private void SetLatestVersionLabel() {
73 | CurrentVersionLabel.Content = "Current Roblox Version: " + currentRobloxVersion;
74 | }
75 |
76 | private void SetAvailableVersionLabel() {
77 | AvailableVersionLabel.Content = "Available Roblox Version: " + availableRobloxVersion;
78 | }
79 |
80 | private void DownloadAvailableVersion() {
81 | using (WebClient webClient = new WebClient()) {
82 | webClient.DownloadFile("https://setup.rbxcdn.com/" + availableRobloxVersion + "-RobloxApp.zip", availableRobloxVersion + ".zip");
83 | }
84 | }
85 |
86 | // Button methods.
87 |
88 | private void DownloadAvailableBtn_Click(object sender, RoutedEventArgs e) {
89 | DownloadAvailableVersion();
90 | MessageBox.Show("Downloaded the latest available Roblox version.", "Downloaded", MessageBoxButton.OK, MessageBoxImage.Information);
91 | }
92 |
93 | private void ReplaceVersionBtn_Click(object sender, RoutedEventArgs e) {
94 | string zipPath = availableRobloxVersion + ".zip";
95 |
96 | if (!File.Exists(zipPath)) {
97 | DownloadAvailableVersion();
98 | }
99 |
100 | using (ZipArchive archive = ZipFile.OpenRead(zipPath)) {
101 | foreach (ZipArchiveEntry entry in archive.Entries) {
102 | if (entry.Name == robloxClientName) {
103 | entry.ExtractToFile(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Roblox\Versions\" + currentRobloxVersion + "\\" + entry.Name, true);
104 |
105 | MessageBox.Show("Replaced the current version of Roblox with the latest available version.", "Replaced", MessageBoxButton.OK, MessageBoxImage.Information);
106 | }
107 | }
108 | }
109 | }
110 | }
111 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/visualstudio
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudio
4 |
5 | ### VisualStudio ###
6 | ## Ignore Visual Studio temporary files, build results, and
7 | ## files generated by popular Visual Studio add-ons.
8 | ##
9 | ## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
10 |
11 | # User-specific files
12 | *.rsuser
13 | *.suo
14 | *.user
15 | *.userosscache
16 | *.sln.docstates
17 |
18 | # User-specific files (MonoDevelop/Xamarin Studio)
19 | *.userprefs
20 |
21 | # Mono auto generated files
22 | mono_crash.*
23 |
24 | # Build results
25 | [Dd]ebug/
26 | [Dd]ebugPublic/
27 | [Rr]elease/
28 | [Rr]eleases/
29 | x64/
30 | x86/
31 | [Ww][Ii][Nn]32/
32 | [Aa][Rr][Mm]/
33 | [Aa][Rr][Mm]64/
34 | bld/
35 | [Bb]in/
36 | [Oo]bj/
37 | [Ll]og/
38 | [Ll]ogs/
39 |
40 | # Visual Studio 2015/2017 cache/options directory
41 | .vs/
42 | # Uncomment if you have tasks that create the project's static files in wwwroot
43 | #wwwroot/
44 |
45 | # Visual Studio 2017 auto generated files
46 | Generated\ Files/
47 |
48 | # MSTest test Results
49 | [Tt]est[Rr]esult*/
50 | [Bb]uild[Ll]og.*
51 |
52 | # NUnit
53 | *.VisualState.xml
54 | TestResult.xml
55 | nunit-*.xml
56 |
57 | # Build Results of an ATL Project
58 | [Dd]ebugPS/
59 | [Rr]eleasePS/
60 | dlldata.c
61 |
62 | # Benchmark Results
63 | BenchmarkDotNet.Artifacts/
64 |
65 | # .NET Core
66 | project.lock.json
67 | project.fragment.lock.json
68 | artifacts/
69 |
70 | # ASP.NET Scaffolding
71 | ScaffoldingReadMe.txt
72 |
73 | # StyleCop
74 | StyleCopReport.xml
75 |
76 | # Files built by Visual Studio
77 | *_i.c
78 | *_p.c
79 | *_h.h
80 | *.ilk
81 | *.meta
82 | *.obj
83 | *.iobj
84 | *.pch
85 | *.pdb
86 | *.ipdb
87 | *.pgc
88 | *.pgd
89 | *.rsp
90 | *.sbr
91 | *.tlb
92 | *.tli
93 | *.tlh
94 | *.tmp
95 | *.tmp_proj
96 | *_wpftmp.csproj
97 | *.log
98 | *.tlog
99 | *.vspscc
100 | *.vssscc
101 | .builds
102 | *.pidb
103 | *.svclog
104 | *.scc
105 |
106 | # Chutzpah Test files
107 | _Chutzpah*
108 |
109 | # Visual C++ cache files
110 | ipch/
111 | *.aps
112 | *.ncb
113 | *.opendb
114 | *.opensdf
115 | *.sdf
116 | *.cachefile
117 | *.VC.db
118 | *.VC.VC.opendb
119 |
120 | # Visual Studio profiler
121 | *.psess
122 | *.vsp
123 | *.vspx
124 | *.sap
125 |
126 | # Visual Studio Trace Files
127 | *.e2e
128 |
129 | # TFS 2012 Local Workspace
130 | $tf/
131 |
132 | # Guidance Automation Toolkit
133 | *.gpState
134 |
135 | # ReSharper is a .NET coding add-in
136 | _ReSharper*/
137 | *.[Rr]e[Ss]harper
138 | *.DotSettings.user
139 |
140 | # TeamCity is a build add-in
141 | _TeamCity*
142 |
143 | # DotCover is a Code Coverage Tool
144 | *.dotCover
145 |
146 | # AxoCover is a Code Coverage Tool
147 | .axoCover/*
148 | !.axoCover/settings.json
149 |
150 | # Coverlet is a free, cross platform Code Coverage Tool
151 | coverage*.json
152 | coverage*.xml
153 | coverage*.info
154 |
155 | # Visual Studio code coverage results
156 | *.coverage
157 | *.coveragexml
158 |
159 | # NCrunch
160 | _NCrunch_*
161 | .*crunch*.local.xml
162 | nCrunchTemp_*
163 |
164 | # MightyMoose
165 | *.mm.*
166 | AutoTest.Net/
167 |
168 | # Web workbench (sass)
169 | .sass-cache/
170 |
171 | # Installshield output folder
172 | [Ee]xpress/
173 |
174 | # DocProject is a documentation generator add-in
175 | DocProject/buildhelp/
176 | DocProject/Help/*.HxT
177 | DocProject/Help/*.HxC
178 | DocProject/Help/*.hhc
179 | DocProject/Help/*.hhk
180 | DocProject/Help/*.hhp
181 | DocProject/Help/Html2
182 | DocProject/Help/html
183 |
184 | # Click-Once directory
185 | publish/
186 |
187 | # Publish Web Output
188 | *.[Pp]ublish.xml
189 | *.azurePubxml
190 | # Note: Comment the next line if you want to checkin your web deploy settings,
191 | # but database connection strings (with potential passwords) will be unencrypted
192 | *.pubxml
193 | *.publishproj
194 |
195 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
196 | # checkin your Azure Web App publish settings, but sensitive information contained
197 | # in these scripts will be unencrypted
198 | PublishScripts/
199 |
200 | # NuGet Packages
201 | *.nupkg
202 | # NuGet Symbol Packages
203 | *.snupkg
204 | # The packages folder can be ignored because of Package Restore
205 | **/[Pp]ackages/*
206 | # except build/, which is used as an MSBuild target.
207 | !**/[Pp]ackages/build/
208 | # Uncomment if necessary however generally it will be regenerated when needed
209 | #!**/[Pp]ackages/repositories.config
210 | # NuGet v3's project.json files produces more ignorable files
211 | *.nuget.props
212 | *.nuget.targets
213 |
214 | # Microsoft Azure Build Output
215 | csx/
216 | *.build.csdef
217 |
218 | # Microsoft Azure Emulator
219 | ecf/
220 | rcf/
221 |
222 | # Windows Store app package directories and files
223 | AppPackages/
224 | BundleArtifacts/
225 | Package.StoreAssociation.xml
226 | _pkginfo.txt
227 | *.appx
228 | *.appxbundle
229 | *.appxupload
230 |
231 | # Visual Studio cache files
232 | # files ending in .cache can be ignored
233 | *.[Cc]ache
234 | # but keep track of directories ending in .cache
235 | !?*.[Cc]ache/
236 |
237 | # Others
238 | ClientBin/
239 | ~$*
240 | *~
241 | *.dbmdl
242 | *.dbproj.schemaview
243 | *.jfm
244 | *.pfx
245 | *.publishsettings
246 | orleans.codegen.cs
247 |
248 | # Including strong name files can present a security risk
249 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
250 | #*.snk
251 |
252 | # Since there are multiple workflows, uncomment next line to ignore bower_components
253 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
254 | #bower_components/
255 |
256 | # RIA/Silverlight projects
257 | Generated_Code/
258 |
259 | # Backup & report files from converting an old project file
260 | # to a newer Visual Studio version. Backup files are not needed,
261 | # because we have git ;-)
262 | _UpgradeReport_Files/
263 | Backup*/
264 | UpgradeLog*.XML
265 | UpgradeLog*.htm
266 | ServiceFabricBackup/
267 | *.rptproj.bak
268 |
269 | # SQL Server files
270 | *.mdf
271 | *.ldf
272 | *.ndf
273 |
274 | # Business Intelligence projects
275 | *.rdl.data
276 | *.bim.layout
277 | *.bim_*.settings
278 | *.rptproj.rsuser
279 | *- [Bb]ackup.rdl
280 | *- [Bb]ackup ([0-9]).rdl
281 | *- [Bb]ackup ([0-9][0-9]).rdl
282 |
283 | # Microsoft Fakes
284 | FakesAssemblies/
285 |
286 | # GhostDoc plugin setting file
287 | *.GhostDoc.xml
288 |
289 | # Node.js Tools for Visual Studio
290 | .ntvs_analysis.dat
291 | node_modules/
292 |
293 | # Visual Studio 6 build log
294 | *.plg
295 |
296 | # Visual Studio 6 workspace options file
297 | *.opt
298 |
299 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
300 | *.vbw
301 |
302 | # Visual Studio 6 auto-generated project file (contains which files were open etc.)
303 | *.vbp
304 |
305 | # Visual Studio 6 workspace and project file (working project files containing files to include in project)
306 | *.dsw
307 | *.dsp
308 |
309 | # Visual Studio 6 technical files
310 |
311 | # Visual Studio LightSwitch build output
312 | **/*.HTMLClient/GeneratedArtifacts
313 | **/*.DesktopClient/GeneratedArtifacts
314 | **/*.DesktopClient/ModelManifest.xml
315 | **/*.Server/GeneratedArtifacts
316 | **/*.Server/ModelManifest.xml
317 | _Pvt_Extensions
318 |
319 | # Paket dependency manager
320 | .paket/paket.exe
321 | paket-files/
322 |
323 | # FAKE - F# Make
324 | .fake/
325 |
326 | # CodeRush personal settings
327 | .cr/personal
328 |
329 | # Python Tools for Visual Studio (PTVS)
330 | __pycache__/
331 | *.pyc
332 |
333 | # Cake - Uncomment if you are using it
334 | # tools/**
335 | # !tools/packages.config
336 |
337 | # Tabs Studio
338 | *.tss
339 |
340 | # Telerik's JustMock configuration file
341 | *.jmconfig
342 |
343 | # BizTalk build output
344 | *.btp.cs
345 | *.btm.cs
346 | *.odx.cs
347 | *.xsd.cs
348 |
349 | # OpenCover UI analysis results
350 | OpenCover/
351 |
352 | # Azure Stream Analytics local run output
353 | ASALocalRun/
354 |
355 | # MSBuild Binary and Structured Log
356 | *.binlog
357 |
358 | # NVidia Nsight GPU debugger configuration file
359 | *.nvuser
360 |
361 | # MFractors (Xamarin productivity tool) working folder
362 | .mfractor/
363 |
364 | # Local History for Visual Studio
365 | .localhistory/
366 |
367 | # Visual Studio History (VSHistory) files
368 | .vshistory/
369 |
370 | # BeatPulse healthcheck temp database
371 | healthchecksdb
372 |
373 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
374 | MigrationBackup/
375 |
376 | # Ionide (cross platform F# VS Code tools) working folder
377 | .ionide/
378 |
379 | # Fody - auto-generated XML schema
380 | FodyWeavers.xsd
381 |
382 | # VS Code files for those working on multiple tools
383 | .vscode/*
384 | !.vscode/settings.json
385 | !.vscode/tasks.json
386 | !.vscode/launch.json
387 | !.vscode/extensions.json
388 | *.code-workspace
389 |
390 | # Local History for Visual Studio Code
391 | .history/
392 |
393 | # Windows Installer files from build outputs
394 | *.cab
395 | *.msi
396 | *.msix
397 | *.msm
398 | *.msp
399 |
400 | # JetBrains Rider
401 | *.sln.iml
402 |
403 | ### VisualStudio Patch ###
404 | # Additional files built by Visual Studio
405 |
406 | # End of https://www.toptal.com/developers/gitignore/api/visualstudio
--------------------------------------------------------------------------------