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); }
        }
Example #2
0
        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));
        }
Example #3
0
        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); }
        }
Example #4
0
        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
                );
        });
Example #5
0
        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); }
        }
Example #6
0
        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();
        }