/// <summary> /// 확장 도구가 등록되어있는 지 여부를 확인합니다. /// </summary> /// <returns></returns> public bool IsAddedExtension() { string subkey = @"Software\KADOKAWA\RPGMV"; RegistryKey rk = Registry.CurrentUser.OpenSubKey(subkey, true); if (rk == null) { return(false); } JArray jsonArray = JArray.Parse(Convert.ToString(rk.GetValue("mvTools"))); // 배열이 없으면 if (jsonArray.Count == 0) { return(false); } else { // 배열을 읽어와 자동으로 목록화합니다. IList <RMMV.ExtensionSchema> data = jsonArray.ToObject <IList <RMMV.ExtensionSchema> >(); RMMV.ExtensionSchema my_ex_data = data.FirstOrDefault(p => (p.name == Localization.RMMV_ExtensionSchema_name)); // 확장 프로그램이 레지스트리에 등록된 적이 없습니다. if (my_ex_data == null) { return(false); } else { return(true); } } }
/// <summary> /// 레지스트리에 확장 도구를 등록하거나 해제합니다. /// </summary> /// <param name="isShowMessage"></param> public void UpdateRegistry(bool isShowMessage = true) { string subkey = @"Software\KADOKAWA\RPGMV"; RegistryKey rk = Registry.CurrentUser.OpenSubKey(subkey, true); if (rk == null) { rk = Registry.CurrentUser.CreateSubKey(subkey, RegistryKeyPermissionCheck.ReadWriteSubTree); } // 새로운 데이터를 생성합니다. var process = Process.GetCurrentProcess(); string[] paths = Path.GetDirectoryName(process.MainModule.FileName).Split('\\'); string[] destPaths = new string[paths.Length - 1]; Array.Copy(paths, 1, destPaths, 0, paths.Length - 1); string driveName = paths[0]; string otherPartPaths = Path.Combine(destPaths).Replace("\\", "/"); string fullPath = driveName + "/" + otherPartPaths; //string fullPath = Path.Combine(paths).Replace("\\", "/"); Console.WriteLine(fullPath); RMMV.ExtensionSchema es = new RMMV.ExtensionSchema { appName = "NewResourceManager.exe", hint = Localization.RMMV_ExtensionSchema_hint, name = Localization.RMMV_ExtensionSchema_name, path = fullPath }; JObject newData = (JObject)JToken.FromObject(es); string jsonData = Convert.ToString(rk.GetValue("mvTools")); Boolean isInvalidJsonData = jsonData.Equals("[]"); JArray jsonArray = new JArray(); // 배열이 없으면 if (isInvalidJsonData) { // 배열을 새로 만듭니다. // 배열에 새로운 JSON 데이터를 추가합니다. jsonArray.Add(newData); if (isShowMessage) { // Inject MessageBox.Show(Localization.UpdateRegistryRetryProgramMsg); } isActivatedExtensionProgram = true; } else { jsonArray = JArray.Parse(jsonData); // 배열을 읽어와 자동으로 목록화합니다. IList <RMMV.ExtensionSchema> data = jsonArray.ToObject <IList <RMMV.ExtensionSchema> >(); RMMV.ExtensionSchema my_ex_data = data.FirstOrDefault(p => (p.name == Localization.RMMV_ExtensionSchema_name)); // 확장 프로그램이 레지스트리에 등록된 적이 없습니다. if (my_ex_data == null) { jsonArray.Add(newData); if (isShowMessage) { // Inject MessageBox.Show(Localization.UpdateRegistryRetryProgramMsg); } isActivatedExtensionProgram = true; } else { isActivatedExtensionProgram = true; // 확장 프로그램이 이미 등록되어있습니다. if (isShowMessage) { MessageBox.Show(Localization.UpdateRegistryAlreadyProgram); } if (isShowMessage) { DialogResult isOk = MessageBox.Show(Localization.UpdateRegistryDeleteProgram, Localization.InformationMsg, MessageBoxButtons.YesNo); if (isOk == DialogResult.Yes) { // 배열에서 특정 값을 제외합니다. IList <RMMV.ExtensionSchema> list = jsonArray.ToObject <IList <RMMV.ExtensionSchema> >(); JArray uniq = new JArray(); foreach (RMMV.ExtensionSchema node in list) { if (node.name != es.name) { JObject uniqData = (JObject)JToken.FromObject(node); uniq.Add(uniqData); } } jsonArray = uniq; isActivatedExtensionProgram = false; // Eject MessageBox.Show(Localization.EjectMessage); } } } } // 레지스트리 값을 업데이트합니다. rk.SetValue("mvTools", jsonArray.ToString(Newtonsoft.Json.Formatting.None), RegistryValueKind.String); if (isActivatedExtensionProgram) { add_extension_btn.Text = Localization.RemoveExtensionButton; } else { add_extension_btn.Text = Localization.AddExtensionButton; } }