public void Registry_Update_Throws() { try { var asm = Assembly.GetExecutingAssembly(); var settings = new SettingsFolder(asm, IO); var path = @"C:\Program Files\CubeICE\cubeice.exe"; var registrar = new AssociateRegistrar(path) { Arguments = new List <string> { "/x" }, IconLocation = $"{path},{settings.Value.Associate.IconIndex}", ToolTip = false, }; registrar.Update(settings.Value.Associate.Value); foreach (var key in settings.Value.Associate.Value.Keys.ToArray()) { settings.Value.Associate.Value[key] = false; } registrar.Update(settings.Value.Associate.Value); Assert.Pass("Administrator"); } catch (UnauthorizedAccessException err) { Assert.Pass(err.Message); } }
public void Command() { var path = "C:\\Program Files\\CubeICE\\cubeice.exe"; var cmd = "\"C:\\Program Files\\CubeICE\\cubeice.exe\" \"%1\""; var src = new AssociateRegistrar(path) { IconLocation = path, ToolTip = false, }; Assert.That(src.Command, Is.EqualTo(cmd)); }
static void Main(string[] args) { var type = typeof(Program); try { Logger.Configure(); Logger.Info(type, Assembly.GetExecutingAssembly()); Logger.Info(type, string.Join(" ", args)); var asm = Assembly.GetExecutingAssembly(); var settings = new SettingsFolder(asm, new AfsIO()); if (args.Length > 0 && args[0].ToLowerInvariant() == "/uninstall") { Clear(settings); } else { settings.Load(); } var dir = System.IO.Path.GetDirectoryName(asm.Location); var exe = System.IO.Path.Combine(dir, "cubeice.exe"); var icon = $"{exe},{settings.Value.Associate.IconIndex}"; Logger.Info(type, $"FileName:{exe}"); Logger.Info(type, $"IconLocation:{icon}"); var registrar = new AssociateRegistrar(exe) { IconLocation = icon, ToolTip = settings.Value.ToolTip, }; registrar.Arguments = PresetMenu.Extract.ToArguments(); registrar.Update(settings.Value.Associate.Value); Shell32.NativeMethods.SHChangeNotify( 0x08000000, // SHCNE_ASSOCCHANGED 0x00001000, // SHCNF_FLUSH IntPtr.Zero, IntPtr.Zero ); } catch (Exception err) { Logger.Error(type, err); } }
static void Main(string[] args) => Source.LogError(() => { Source.LogInfo(Source.Assembly); Source.LogInfo($"[ {args.Join(" ")} ]"); var src = new SettingFolder(); if (args.Length > 0 && args[0].ToLowerInvariant() == "/uninstall") { Clear(src); } else { src.Load(); } var dir = Source.Assembly.GetDirectoryName(); var exe = System.IO.Path.Combine(dir, "cubeice.exe"); var icon = $"{exe},{src.Value.Associate.IconIndex}"; Source.LogInfo($"FileName:{exe}"); Source.LogInfo($"IconLocation:{icon}"); var registrar = new AssociateRegistrar(exe) { IconLocation = icon, ToolTip = src.Value.ToolTip, }; registrar.Update(src.Value.Associate.Value); Shell32.NativeMethods.SHChangeNotify( 0x08000000, // SHCNE_ASSOCCHANGED 0x00001000, // SHCNF_FLUSH IntPtr.Zero, IntPtr.Zero ); });
public void Update() { try { var settings = new SettingFolder(); var path = @"C:\Program Files\CubeICE\cubeice.exe"; var registrar = new AssociateRegistrar(path) { IconLocation = $"{path},{settings.Value.Associate.IconIndex}", ToolTip = false, }; registrar.Update(settings.Value.Associate.Value); foreach (var key in settings.Value.Associate.Value.Keys.ToArray()) { settings.Value.Associate.Value[key] = false; } registrar.Update(settings.Value.Associate.Value); Assert.Pass("Administrator"); } catch (UnauthorizedAccessException err) { Assert.Ignore(err.Message); } }
static void Main(string[] args) { if (args.Length > 0) { string firstarg = ""; //检查第一个参数 firstarg = args[0]; //设置配置文件路径 CoreManager.StartupPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Kaedei" + Path.DirectorySeparatorChar + "AcDown" + Path.DirectorySeparatorChar); if (File.Exists(firstarg)) { string filename = new FileInfo(firstarg).FullName; //安装插件 if (firstarg.EndsWith(".acp", StringComparison.CurrentCultureIgnoreCase)) { try { var attrib = PluginManager.InstallPlugin(filename); MessageBox.Show("插件添加成功!" + Environment.NewLine + Environment.NewLine + "名称: " + attrib.FriendlyName + Environment.NewLine + "版本: " + attrib.Version.ToString() + Environment.NewLine + "作者: " + attrib.Author + Environment.NewLine + "来自: " + attrib.SupportUrl + Environment.NewLine + Environment.NewLine + "这个插件会在您下一次启动AcDown之后被加载", "添加插件成功", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (PluginFileNotSupportedException) { MessageBox.Show("未能成功加载此插件文件" + Environment.NewLine + "这个文件可能不是正确的AcDown插件", "插件加载失败", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (Exception) { MessageBox.Show("文件读取失败" + Environment.NewLine + "如果您想重新安装一个已有的插件,请退出所有正在运行中的AcDown后再安装", "插件加载失败", MessageBoxButtons.OK, MessageBoxIcon.Stop); } } else { //如果程序以临时文件启动 if (Updater.CheckIfUpdating(Application.ExecutablePath)) { //以自身覆盖目标文件 if (!Updater.CopyTempFileToTargetFile(filename)) { MessageBox.Show("自动更新失败: 旧版本的AcDown可能尚未完全退出", "AcDown自动更新", MessageBoxButtons.OK, MessageBoxIcon.Warning); } Process.Start(filename, "updated"); //重新执行目标文件 } } //退出当前程序 return; } else if (firstarg.Equals("updated", StringComparison.CurrentCultureIgnoreCase)) { //如果参数为"updated",删除临时文件 Updater.DeleteTempFile(); } else if (firstarg.Equals("regasso", StringComparison.CurrentCultureIgnoreCase)) { if (Tools.IsRunningOnMono) { //MessageBox.Show("此功能暂时不能在非 Windows 上使用。"); return; } //注册.acplay关联 AssociateRegistrar.CreateAssociate( Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Kaedei" + Path.DirectorySeparatorChar + "AcPlay" + Path.DirectorySeparatorChar + "acplay.exe"), ".acplay", "AcPlayFile", "弹幕播放快捷方式", ""); //注册.acp关联 AssociateRegistrar.CreateAssociate(Application.ExecutablePath, ".acp", "AcDownPlugin", "AcDown插件", ""); return; } else if (firstarg.Equals("firstrun", StringComparison.CurrentCultureIgnoreCase)) { var fr = new FirstrunHandler(); fr.RunFirstRun(); return; } } bool isAcDownNotStarted = false; Mutex mLocker = new Mutex(true, "AcDown", out isAcDownNotStarted); if (isAcDownNotStarted) { mLocker.WaitOne(); } else { if (MessageBox.Show("AcDown正在工作中,您是否希望运行一个新的AcDown实例?" + Environment.NewLine + "(同时打开多个AcDown容易出现不稳定的状况)", "启动多个AcDown", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { return; } } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Program.frmStart = new FormStart(); Application.Run(Program.frmStart); mLocker.ReleaseMutex(); }