private void GetSearchTextFromCloud() { new Thread((ThreadStart)(() => { try { this.defaultSearchBoxText = LocaleStrings.GetLocalizedString("STRING_SEARCH", ""); string urlWithParams = WebHelper.GetUrlWithParams(WebHelper.GetServerHost() + "/app_center_searchdefaultquery", (string)null, (string)null, (string)null); Logger.Debug("url for search api :" + urlWithParams); string json = BstHttpClient.Get(urlWithParams, (Dictionary <string, string>)null, false, string.Empty, 0, 1, 0, false, "bgp"); Logger.Debug("result for app_center_searchdefaultquery : " + json); JObject jobject = JObject.Parse(json); if ((bool)jobject["success"]) { string str = jobject["result"].ToString().Trim(); if (!string.IsNullOrEmpty(str)) { this.defaultSearchBoxText = str; } Logger.Debug("response from search text cloud api :" + str); } } catch (Exception ex) { Logger.Warning("Failed to fetch text from cloud... Err : " + ex.ToString()); } this.Dispatcher.Invoke((Delegate)(() => this.mSearchTextBox.Text = this.defaultSearchBoxText)); })) { IsBackground = true }.Start(); }
internal void SendSecurityBreachesStatsToCloud(bool isOnClose = false) { new Thread((ThreadStart)(() => { try { this.AddBlacklistedRunningApplicationsToSecurityBreaches(); if (this.mSecurityBreachesList.Count > 0) { BstHttpClient.Post(WebHelper.GetUrlWithParams(string.Format((IFormatProvider)CultureInfo.InvariantCulture, "{0}/{1}", (object)RegistryManager.Instance.Host, (object)"/bs4/security_metrics"), (string)null, (string)null, (string)null), new Dictionary <string, string>() { { "security_metric_data", this.GetSecurityMetricsData() } }, (Dictionary <string, string>)null, false, this.mVmName, 10000, 1, 0, false, "bgp"); } } catch (Exception ex) { Logger.Error("Exception while sending security stats to cloud : {0}", (object)ex.ToString()); } if (!isOnClose) { return; } SecurityMetrics.SecurityMetricsInstanceList.Remove(this.mVmName); })).Start(); }
private static void GetGrmFromCloud(IEnumerable <string> listOfPackages = null) { try { if (listOfPackages != null && listOfPackages.Any <string>()) { List <string> first = new List <string>(); foreach (string vm in RegistryManager.Instance.VmList) { first = first.Union <string>((IEnumerable <string>)JsonParser.GetInstalledAppsList(vm)).ToList <string>(); } if (!listOfPackages.Intersect <string>((IEnumerable <string>)first).Any <string>()) { return; } } JObject jobject = JObject.Parse(HTTPUtils.SendRequestToCloud("grm/files", (Dictionary <string, string>)null, "Android", 0, (Dictionary <string, string>)null, false, 1, 0, false)); if ((int)jobject["code"] != 200 || !jobject["data"].Value <bool>((object)"success")) { return; } string url = jobject["data"][(object)"files"].Value <string>((object)"translations_file"); string fullJson = BstHttpClient.Get(jobject["data"][(object)"files"].Value <string>((object)"config_file"), (Dictionary <string, string>)null, false, BlueStacks.Common.Strings.CurrentDefaultVmName, 0, 1, 0, false, "bgp"); string currentDefaultVmName = BlueStacks.Common.Strings.CurrentDefaultVmName; string translationJson = BstHttpClient.Get(url, (Dictionary <string, string>)null, false, currentDefaultVmName, 0, 1, 0, false, "bgp"); AppRequirementsParser.Instance.UpdateOverwriteRequirements(fullJson, translationJson); } catch (Exception ex) { Logger.Info("Error Getting Grm json " + ex.ToString()); } }
public static void UpdateClickStats(string vmName) { if (!CloudAnnouncement.sUploadStats) { return; } new Thread((ThreadStart)(() => { try { if (BstHttpClient.Get(string.Format("{0}/updateAnnouncementStats", (object)RegistryManager.Instance.Host), new Dictionary <string, string>() { { "x_last_msg_id", Convert.ToString(CloudAnnouncement.sMsgId) } }, false, vmName, 0, 1, 0, false, "bgp") != null) { return; } Logger.Info("Could not send click stats."); } catch (Exception ex) { Logger.Error("Failed to send click stats: " + ex.ToString()); } })) { IsBackground = true }.Start(); }
private static void SendPromotionStats(Dictionary <BootPromotion, int> bootPromos) { try { Dictionary <string, string> data = new Dictionary <string, string>() { { "prod_ver", RegistryManager.Instance.ClientVersion }, { "eng_ver", RegistryManager.Instance.Version }, { "guid", RegistryManager.Instance.UserGuid }, { "locale", RegistryManager.Instance.UserSelectedLocale }, { "oem", RegistryManager.Instance.Oem }, { "partner", RegistryManager.Instance.Partner }, { "campaign_json", RegistryManager.Instance.CampaignJson } }; List <BootBanner> bootBannerList = new List <BootBanner>(); foreach (KeyValuePair <BootPromotion, int> bootPromo in bootPromos) { bootBannerList.Add(new BootBanner() { Frequency = bootPromo.Value.ToString((IFormatProvider)CultureInfo.InvariantCulture), ClickActionPackagename = bootPromo.Key.ExtraPayload["click_action_packagename"], ClickGenericAction = bootPromo.Key.ExtraPayload["click_generic_action"], ClickActionValue = bootPromo.Key.ExtraPayload["click_action_value"], Id = bootPromo.Key.Id, ButtonText = bootPromo.Key.ButtonText, Order = bootPromo.Key.Order.ToString((IFormatProvider)CultureInfo.InvariantCulture), ImageUrl = bootPromo.Key.ImageUrl, HashTags = bootPromo.Key.ExtraPayload["hash_tags"] }); } data.Add("boot_banners", JsonConvert.SerializeObject((object)bootBannerList)); BstHttpClient.Post(WebHelper.GetUrlWithParams(string.Format((IFormatProvider)CultureInfo.InvariantCulture, "{0}/{1}", (object)RegistryManager.Instance.Host, (object)"bs4/stats/client_boot_promotion_stats"), (string)null, (string)null, (string)null), data, (Dictionary <string, string>)null, false, BlueStacks.Common.Strings.CurrentDefaultVmName, 0, 1, 0, false, "bgp"); } catch (Exception ex) { Logger.Error(nameof(SendPromotionStats), (object)ex); } }
private static void StartZygote() { BstHttpClient.Post(string.Format("http://127.0.0.1:{0}/startzygote", (object)RegistryManager.Instance.DefaultGuest.FrontendServerPort), new Dictionary <string, string>() { { "vmName", Strings.CurrentDefaultVmName } }, (Dictionary <string, string>)null, false, Strings.CurrentDefaultVmName, 0, 1, 0, false, "bgp"); }
private void GetPreDefinedProfilesFromCloud() { new Thread((ThreadStart)(() => { try { this.GetCurrentDeviceProfileFromAndroid(this.ParentWindow.mVmName); if (this.mPreDefinedProfilesList.Count == 0 || this.mMobileOperatorsList.Count == 0) { string url = string.Format((IFormatProvider)CultureInfo.InvariantCulture, "{0}/{1}/{2}", (object)RegistryManager.Instance.Host, (object)"bs4", (object)"get_device_profile_list"); Dictionary <string, string> commonPostData = WebHelper.GetCommonPOSTData(); commonPostData.Add("ca_code", Utils.GetValueInBootParams("caCode", this.ParentWindow.mVmName, "", "bgp")); Dictionary <string, string> data = commonPostData; string mVmName = this.ParentWindow.mVmName; JObject jobject1 = JObject.Parse(BstHttpClient.Post(url, data, (Dictionary <string, string>)null, false, mVmName, 0, 1, 0, false, "bgp")); if (jobject1 == null || !(bool)jobject1["success"]) { return; } if (!JsonExtensions.IsNullOrEmptyBrackets(jobject1["device_profile_list"].ToString())) { foreach (JObject jobject2 in jobject1["device_profile_list"].ToArray <JToken>()) { this.mPreDefinedProfilesList[jobject2["pcode"].ToString()] = jobject2["display_name"].ToString(); } } if (jobject1.ContainsKey("ca_selector_list") && !JsonExtensions.IsNullOrEmptyBrackets(jobject1["ca_selector_list"].ToString())) { foreach (JObject jobject2 in jobject1["ca_selector_list"].ToArray <JToken>()) { this.mMobileOperatorsList[jobject2["ca_selector"].ToString()] = jobject2["display_name"].ToString(); } } this.AddPreDefinedProfilesinComboBox(); } else { this.AddPreDefinedProfilesinComboBox(); } } catch (Exception ex) { Logger.Error("Error while getting device profile from cloud : " + ex.ToString()); this.ChangeNoInternetGridVisibility(true); } })) { IsBackground = true }.Start(); }
public static bool ShowAnnouncement(string vmName) { if (!Features.IsFeatureEnabled(1UL)) { Logger.Debug("Broadcast message feature disabled. Ignoring..."); return(false); } Logger.Info("Checking for announcement"); try { if (Directory.Exists(CloudAnnouncement.Dir)) { string[] files = Directory.GetFiles(CloudAnnouncement.Dir); for (int index = 0; index < files.Length; ++index) { try { if (System.IO.File.Exists(files[index])) { System.IO.File.Delete(files[index]); } } catch (Exception ex) { Logger.Error("Failed to delete file. err: " + ex.Message); } } } else { Directory.CreateDirectory(CloudAnnouncement.Dir); } } catch (Exception ex) { Logger.Error("Failed to delete/create announcement dir. err: " + ex.Message); if (!Directory.Exists(CloudAnnouncement.Dir)) { Directory.CreateDirectory(CloudAnnouncement.Dir); } } return(CloudAnnouncement.ShowAnnouncementResponse(BstHttpClient.Get(string.Format("{0}/getAnnouncement", (object)RegistryManager.Instance.Host), new Dictionary <string, string>() { { "x_locale", CultureInfo.CurrentCulture.Name.ToLower() } }, false, vmName, 0, 1, 0, false, "bgp"), vmName)); }
internal static void SendStats( string url, Dictionary <string, string> data, Dictionary <string, string> headers = null, string vmname = "") { try { BstHttpClient.Post(url, data, headers, false, vmname, 0, 1, 0, false, "bgp"); } catch (Exception ex) { Logger.Info("Failed to send stats for : " + url + ". Reason : " + ex.ToString()); } }
public static void ReportUninstallFailedStats(string uninstallEvent) { Dictionary <string, string> commonData = UninstallerStats.GetCommonData(uninstallEvent); commonData.Add("failure_reason", UninstallerStats.ParseEnumToString(UninstallerStats.UninstallerComment)); try { Logger.Debug("Response for uninstall failed logs upload : " + BstHttpClient.HTTPGaeFileUploader(UninstallerStats.UninstallerStatsUrl, commonData, (Dictionary <string, string>)null, UninstallerProperties.LogFilePath, "text/plain", false, (string)null)); } catch (Exception ex) { Logger.Error("Failed to upload uninstall failed logs."); Logger.Error(ex.ToString()); } }
internal JToken GetPostBootData() { JToken jtoken = (JToken)null; try { string json = BstHttpClient.Get(this.Url, (Dictionary <string, string>)null, false, "Android", 0, 1, 0, false, "bgp"); Logger.Debug("Postboot data Url: " + this.Url); jtoken = JToken.Parse(json); } catch (Exception ex) { Logger.Error("Error Getting Post Boot Data err: " + ex.ToString()); } return(jtoken); }
private void _bgGetUpdateDetails_DoWork(object sender, DoWorkEventArgs e) { JToken jtoken = (JToken)null; try { jtoken = JToken.Parse(BstHttpClient.Post(RegistryManager.Instance.Host + "/bs4/check_upgrade?", this.CreateRequestData(), (Dictionary <string, string>)null, false, "Android", 0, 1, 0, false, "bgp")); Logger.Info("Response received for check for update: " + Environment.NewLine + jtoken?.ToString()); } catch (Exception ex) { Logger.Error("Failed to get oem err: {0}", (object)ex.Message); } finally { e.Result = (object)jtoken; } }
internal static void RunCommand( KeyValuePair <string, SerializableDictionary <string, string> > item) { try { string key = item.Key; Dictionary <string, string> data = new Dictionary <string, string>(); foreach (KeyValuePair <string, string> keyValuePair in (Dictionary <string, string>)item.Value) { data.Add(keyValuePair.Key, keyValuePair.Value); } string url = string.Format("http://127.0.0.1:{0}/{1}", (object)Utils.GetBstCommandProcessorPort(MultiInstanceStrings.VmName), (object)key); Logger.Info("The url being hit is {0}", (object)url); Logger.Info("Resp: {0}", (object)BstHttpClient.Post(url, data, (Dictionary <string, string>)null, false, MultiInstanceStrings.VmName, 500, 1, 0, false, "bgp")); } catch (Exception ex) { Logger.Error("Exception in SendKeymappingFiledownloadRequest. Err : " + ex.ToString()); } }
internal static void HandleUsageNotification(JObject resJson, string vmName) { try { string result = ""; string jsonObjectString = JSONUtils.GetJSONObjectString(AppUsageTimer.GetRealtimeDictionary()); JObject.Parse(resJson["bluestacks_notification"][(object)"payload"].ToString()).AssignStringIfContains("handler", ref result); string url = WebHelper.GetServerHost() + "/v2/" + result; Dictionary <string, string> dictionary = new Dictionary <string, string>() { ["oem"] = "bgp", ["client_ver"] = RegistryManager.Instance.ClientVersion, ["engine_ver"] = RegistryManager.Instance.Version, ["guid"] = RegistryManager.Instance.UserGuid, ["locale"] = RegistryManager.Instance.UserSelectedLocale, ["partner"] = RegistryManager.Instance.Partner, ["campaignMD5"] = RegistryManager.Instance.CampaignMD5 }; if (!string.IsNullOrEmpty(RegistryManager.Instance.RegisteredEmail)) { dictionary["email"] = RegistryManager.Instance.RegisteredEmail; } dictionary["usage_data"] = jsonObjectString; if (!dictionary.ContainsKey("current_app")) { dictionary.Add("current_app", BlueStacksUIUtils.DictWindows[vmName].mTopBar.mAppTabButtons.SelectedTab.PackageName); } else { dictionary["current_app"] = BlueStacksUIUtils.DictWindows[vmName].mTopBar.mAppTabButtons.SelectedTab.PackageName; } Dictionary <string, string> data = dictionary; string empty = string.Empty; Logger.Info("real time app usage response:" + BstHttpClient.Post(url, data, (Dictionary <string, string>)null, false, empty, 0, 1, 0, false, "bgp")); } catch (Exception ex) { Logger.Error("Exception in handling usage notification" + ex.ToString()); } }
public static void SendStats(string uninstallEvent, Dictionary <string, string> extraData = null) { Dictionary <string, string> commonData = UninstallerStats.GetCommonData(uninstallEvent); if (extraData != null) { foreach (KeyValuePair <string, string> keyValuePair in extraData) { commonData.Add(keyValuePair.Key, keyValuePair.Value); } } try { string str = BstHttpClient.Post(UninstallerStats.UninstallerStatsUrl, commonData, (Dictionary <string, string>)null, false, (string)null, 0, 1, 0, false, "bgp"); Logger.Debug(string.Format("Response for event {0}: {1}", (object)uninstallEvent, (object)str)); } catch (Exception ex) { Logger.Error("Failed to send stats for event: " + uninstallEvent); Logger.Error(ex.ToString()); } }
private static void CheckVtxAndShowPopup() { Logger.Info("In CheckVtxAndShowPopup"); int systemInfoStats2 = RegistryManager.Instance.SystemInfoStats2; string deviceCaps = RegistryManager.Instance.DeviceCaps; if (systemInfoStats2 == 1 && !deviceCaps.Equals("")) { Logger.Info("Sending DeviceCaps stats"); Dictionary <string, string> data = new Dictionary <string, string>(); Logger.Info("DeviceCaps: " + deviceCaps); data.Add("data", deviceCaps); data.Add("install_id", RegistryManager.Instance.InstallID); try { BstHttpClient.Post(RegistryManager.Instance.Host + "/stats/systeminfostats2", data, (Dictionary <string, string>)null, false, MultiInstanceStrings.VmName, 0, 1, 0, false, "bgp"); RegistryManager.Instance.SystemInfoStats2 = 0; } catch (Exception ex) { Logger.Error("Exception in Sending systeminfostats2. Err : " + ex.ToString()); } } try { JObject jobject = JObject.Parse(deviceCaps); if (!Oem.Instance.IsVTPopupEnabled || !jobject["cpu_hvm"].ToString().Equals("True", StringComparison.OrdinalIgnoreCase) || !jobject["bios_hvm"].ToString().Equals("False", StringComparison.OrdinalIgnoreCase) || !jobject["engine_enabled"].ToString().Equals("legacy", StringComparison.OrdinalIgnoreCase) && !jobject["engine_enabled"].ToString().Equals("raw", StringComparison.OrdinalIgnoreCase)) { return; } AndroidBootUp.ShowVtxPopup(); } catch (Exception ex) { Logger.Error("Exception in showing vtxpopup {0}. Err : ", (object)ex.ToString()); } }
private JToken GetInstanceWisePostBootData(string vmName, string campaignId = "") { JToken jtoken = (JToken)null; try { Dictionary <string, string> data = new Dictionary <string, string>() { { "all_installed_apps", Utils.GetInstalledAppDataFromAllVms() } }; data.Add("current_vm", "vm" + Utils.GetVmIdFromVmName(vmName)); string json = string.IsNullOrEmpty(campaignId) ? BstHttpClient.Post(this.Url, data, (Dictionary <string, string>)null, false, "Android", 0, 1, 0, false, "bgp") : BstHttpClient.Post(this.Url + "&feature_campaign_id=" + campaignId, data, (Dictionary <string, string>)null, false, "Android", 0, 1, 0, false, "bgp"); Logger.Debug("PostBoot Instance Specific data Url: " + this.Url); jtoken = JToken.Parse(json); } catch (Exception ex) { Logger.Error("Error Getting Post Boot Instance Data err: " + ex.ToString()); } return(jtoken); }
private static JToken GetGuidanceCloudInfoData() { JToken jtoken = (JToken)null; try { string urlWithParams = WebHelper.GetUrlWithParams(string.Format((IFormatProvider)CultureInfo.InvariantCulture, "{0}/{1}/{2}", (object)RegistryManager.Instance.Host, (object)"bs4", (object)"guidance_window"), (string)null, (string)null, (string)null); string json = BstHttpClient.Post(urlWithParams, new Dictionary <string, string>() { { "app_pkgs", GuidanceCloudInfoManager.GetInstalledAppDataFromAllVms() } }, (Dictionary <string, string>)null, false, "Android", 0, 1, 0, false, "bgp"); Logger.Debug("Guidance Cloud Info Url: " + urlWithParams); Logger.Debug("Guidance Cloud Info Response: " + json); jtoken = JToken.Parse(json); } catch (Exception ex) { Logger.Warning("Error Getting GetGuidanceCloudInfoData " + ex.ToString()); } return(jtoken); }
public void GetTranslateImage(Bitmap bitmap) { if (bitmap == null) { return; } this.httpBackGroundThread = new Thread((ThreadStart)(() => { using (MemoryStream memoryStream = new MemoryStream()) { try { bitmap.Save((Stream)memoryStream, ImageFormat.Jpeg); memoryStream.Position = 0L; Dictionary <string, object> parameters = new Dictionary <string, object>(); string a = RegistryManager.Instance.UserSelectedLocale.Substring(0, 2); if (string.Equals(a, "zh-CN", StringComparison.InvariantCulture) || string.Equals(a, "zh-TW", StringComparison.InvariantCulture)) { a = RegistryManager.Instance.UserSelectedLocale; } if (!string.IsNullOrEmpty(RegistryManager.Instance.TargetLocale)) { a = RegistryManager.Instance.TargetLocale; } parameters.Add("locale", (object)a); parameters.Add("inputImage", (object)new FormFile() { Name = "image.jpg", ContentType = "image/jpeg", Stream = (Stream)memoryStream }); parameters.Add("oem", (object)RegistryManager.Instance.Oem); parameters.Add("guid", (object)RegistryManager.Instance.UserGuid); parameters.Add("prod_ver", (object)RegistryManager.Instance.ClientVersion); string str1 = Convert.ToBase64String(memoryStream.ToArray()) + RegistryManager.Instance.UserGuid + "BstTranslate"; _MD5 md5 = new _MD5() { Value = str1 }; parameters.Add("token", (object)md5.FingerPrint); string url = string.Format((IFormatProvider)CultureInfo.InvariantCulture, "{0}/{1}", (object)RegistryManager.Instance.Host, (object)"/translate/postimage"); if (!string.IsNullOrEmpty(RegistryManager.Instance.TargetLocaleUrl)) { url = RegistryManager.Instance.TargetLocaleUrl; } string empty = string.Empty; byte[] dataArray = (byte[])null; string str2; try { str2 = BstHttpClient.PostMultipart(url, parameters, out dataArray); } catch (Exception ex) { Logger.Error("error while downloading translated image.." + ex.ToString()); str2 = "error"; } if (str2.Contains("error")) { this.Dispatcher.Invoke((Delegate)(() => { this.mLoadingImage.Visibility = Visibility.Collapsed; this.mBootText.Text = LocaleStrings.GetLocalizedString("STRING_SOME_ERROR_OCCURED", ""); })); } else { this.Dispatcher.Invoke((Delegate)(() => { this.mFrontEndImage.Source = (ImageSource)ImageUtils.ByteArrayToImage(dataArray); this.mFrontEndImage.ReloadImages(); this.mFrontEndImage.Visibility = Visibility.Visible; this.mTopBar.Visibility = Visibility.Visible; this.mLoadingImage.Visibility = Visibility.Collapsed; this.mBootText.Visibility = Visibility.Collapsed; })); } } catch (Exception ex) { Logger.Error("Error in GetTranslateImage " + ex?.ToString()); this.Dispatcher.Invoke((Delegate)(() => { this.mLoadingImage.Visibility = Visibility.Collapsed; this.mBootText.Text = LocaleStrings.GetLocalizedString("STRING_SOME_ERROR_OCCURED", ""); })); } } })) { IsBackground = true }; this.httpBackGroundThread.Start(); }
private static BlueStacksUpdateData CheckForUpdate(bool isManualCheck) { BlueStacksUpdateData stacksUpdateData = new BlueStacksUpdateData(); try { string urlWithParams = WebHelper.GetUrlWithParams(WebHelper.GetServerHost() + "/check_upgrade", (string)null, (string)null, (string)null); Logger.Debug("The URL for checking upgrade: {0}", (object)urlWithParams); string osName; SystemUtils.GetOSInfo(out osName, out string _, out string _); string str = InstallerArchitectures.AMD64; if (!SystemUtils.IsOs64Bit()) { str = InstallerArchitectures.X86; } Dictionary <string, string> data = new Dictionary <string, string>() { { "installer_arch", str }, { "os", osName }, { "manual_check", isManualCheck.ToString((IFormatProvider)CultureInfo.InvariantCulture) } }; string json = BstHttpClient.Post(urlWithParams, data, (Dictionary <string, string>)null, false, string.Empty, 5000, 1, 0, false, "bgp"); Logger.Info("Response received for check for update: " + Environment.NewLine + json); JObject jobject = JObject.Parse(json); if (jobject["update_available"].ToString().Equals("true", StringComparison.InvariantCultureIgnoreCase) && RegistryManager.Instance.FailedUpgradeVersion != jobject["update_details"][(object)"client_version"].ToString()) { stacksUpdateData.IsUpdateAvailble = true; stacksUpdateData.UpdateType = jobject["update_details"][(object)"upgrade_type"].ToString(); stacksUpdateData.IsFullInstaller = jobject["update_details"][(object)"is_full_installer"].ToObject <bool>(); stacksUpdateData.Md5 = jobject["update_details"][(object)"md5"].ToString(); stacksUpdateData.ClientVersion = jobject["update_details"][(object)"client_version"].ToString(); stacksUpdateData.EngineVersion = jobject["update_details"][(object)"engine_version"].ToString(); stacksUpdateData.DownloadUrl = jobject["update_details"][(object)"download_url"].ToString(); stacksUpdateData.DetailedChangeLogsUrl = jobject["update_details"][(object)"detailed_changelogs_url"].ToString(); if (!Directory.Exists(RegistryManager.Instance.SetupFolder)) { Directory.CreateDirectory(RegistryManager.Instance.SetupFolder); } stacksUpdateData.UpdateDownloadLocation = !stacksUpdateData.IsFullInstaller ? Path.Combine(RegistryManager.Instance.SetupFolder, "BlueStacksInstaller_" + stacksUpdateData.ClientVersion + "_client.zip") : Path.Combine(RegistryManager.Instance.SetupFolder, "BlueStacksInstaller_" + stacksUpdateData.ClientVersion + "_full.exe"); RegistryManager.Instance.DownloadedUpdateFile = stacksUpdateData.UpdateDownloadLocation; BlueStacksUpdater.sBstUpdateData = stacksUpdateData; BlueStacksUpdater.SUpdateState = BlueStacksUpdater.UpdateState.UPDATE_AVAILABLE; } return(stacksUpdateData); } catch (Exception ex) { Logger.Warning("Got error in checking for upgrade: {0}", (object)ex.ToString()); return(new BlueStacksUpdateData() { IsTryAgain = true }); } }