Inheritance: LongRunningTask
        public void TestUpdateLocalGameWithFullInstaller(bool includeGdfDll)
        {
            MockArchiveFile archive = new MockArchiveFile(null, "C:\\Documents and Settings\\user\\desktop\\game.zip");
            new MockArchiveFile(archive, "game.json", ReadTextFile("console.json"));
            new MockArchiveFile(archive, "preferences.json", ReadTextFile("preferences.json"));
            if (includeGdfDll)
            {
                new MockArchiveFile(archive, "gdf.dll", "GAMES_EXPLORER_DEFINITION");
            }
            new MockArchiveFile(archive, "content");
            new MockArchiveFile(archive, "bin");
            ((MockArchiveFactory)ArchiveFactory.Current).VirtualArchives.Add("C:\\Documents and Settings\\user\\desktop\\game.zip", archive);

            var gameInstall = new GameInstall("C:\\Documents and Settings\\user\\desktop\\game.zip");
            Assert.IsTrue(gameInstall.IsValid);

            GameUpdater updater = new GameUpdater(gameInstall);
            updater.Start();

            //check that all the games content was copied across
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game").Exists);
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\program files\\MGDF\\game\\game.json").Exists);
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\program files\\MGDF\\game\\preferences.json").Exists);
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game\\content").Exists);
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game\\bin").Exists);

            Game game = new Game("c:\\program files\\MGDF\\game\\game.json");
            Assert.IsTrue(game.IsValid);

            var key = Registry.Current.CreateSubKey(BaseRegistryKey.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MGDF1_Console");

            GameRegistrar registrar = new GameRegistrar(true, game);
            registrar.Start();

            //assert the shortcuts are in the right place
            key = Registry.Current.OpenSubKey(BaseRegistryKey.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MGDF1_Console");
            Assert.IsNotNull(key);
            Assert.AreEqual("c:\\program files\\MGDF\\resources\\gamesystemicon.ico", key.GetValue("DisplayIcon"));
            Assert.AreEqual("Lua Console", key.GetValue("DisplayName"));
            Assert.AreEqual("http://www.junkship.org", key.GetValue("URLInfoAbout"));
            Assert.AreEqual(1, key.GetDwordValue("NoModify"));
            Assert.AreEqual(1, key.GetDwordValue("NoRepair"));
            Assert.AreEqual("no8 interactive", key.GetValue("Publisher"));
            Assert.AreEqual("c:\\program files\\MGDF\\game", key.GetValue("InstallLocation"));
            Assert.AreEqual("0.1", key.GetValue("DisplayVersion"));

            //assert the shortcuts are in the right place
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\desktop\\Lua Console.lnk").Exists);
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\Documents and Settings\\user\\start menu\\no8 interactive").Exists);
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\start menu\\no8 interactive\\Lua Console.lnk").Exists);

            //assert the the game has been added to the games explorer
            Assert.AreEqual(includeGdfDll, GameExplorer.Current.IsInstalled("c:\\program files\\MGDF\\game\\gdf.dll"));

            //deregister the game
            registrar = new GameRegistrar(false, game);
            registrar.Start();

            //assert the shortcut has been removed
            key = Registry.Current.OpenSubKey(BaseRegistryKey.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MGDF1_Console");
            Assert.IsNull(key);

            //shortcuts should have been removed
            Assert.IsFalse(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\desktop\\Lua Console.lnk").Exists);
            Assert.IsFalse(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\start menu\\no8 interactive\\Lua Console.lnk").Exists);

            if (includeGdfDll)
            {
                //assert the the game has been removed from the games explorer
                Assert.IsTrue(!GameExplorer.Current.IsInstalled("c:\\program files\\MGDF\\game\\gdf.dll"));
            }
        }
Beispiel #2
0
        static int RunMain()
        {
            var commandLine = new CommandLineParser(Environment.GetCommandLineArgs());
             			Resources.InitGameDirectory(commandLine[Resources.GamesManagerArguments.GameDirOverrideArgument]);

            Application.ThreadException += Application_ThreadException;
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Game game = new Game(FileSystem.Combine(Resources.GameBaseDir,Resources.GameConfig));
            if (game.ErrorCollection.Count>0)
            {
                ViewFactory.Current.CreateView<IMessage>().Show("Game configuration invalid " + game.ErrorCollection[0], "Game configuration invalid");
                return -1;
            }
            Game.Current = game;

            Resources.InitUserDirectory(Game.Current.Uid, commandLine[Resources.GamesManagerArguments.UserDirOverrideArgument]!=null);
            Logger.Current = new Logger(Path.Combine(Resources.GameUserDir, "GamesManagerLog.txt"));

            if (commandLine[Resources.GamesManagerArguments.RegisterArgument] != null)
            {
                Logger.Current.Write(LogInfoLevel.Info,"Registering game...");
                if (!UACControl.IsAdmin())
                {
                    Logger.Current.Write(LogInfoLevel.Error, "Registering requires administrator access");
                    ViewFactory.Current.CreateView<IMessage>().Show("Registering requires administrator access", "Administrator access required");
                    return -1;
                }

                var installer = new GameRegistrar(true, Game.Current);
                return installer.Start()==LongRunningTaskResult.Completed ? 0: -1;
            }
            else if (commandLine[Resources.GamesManagerArguments.DeregisterArgument] != null)
            {
                Logger.Current.Write(LogInfoLevel.Info, "Deregistering game...");
                if (!UACControl.IsAdmin())
                {
                    Logger.Current.Write(LogInfoLevel.Error, "Deregistering requires administrator access");
                    ViewFactory.Current.CreateView<IMessage>().Show("Deregistering requires administrator access", "Administrator access required");
                    return -1;
                }

                var uninstaller = new GameRegistrar(false, Game.Current);
                return uninstaller.Start() == LongRunningTaskResult.Completed ? 0 : -1;
            }
            else if (commandLine[Resources.GamesManagerArguments.UpdateFrameworkArgument] != null || commandLine[Resources.GamesManagerArguments.UpdateGameArgument] != null)
            {
                Logger.Current.Write(LogInfoLevel.Info, "Updating game/framework...");

                if (commandLine[Resources.GamesManagerArguments.UpdateFrameworkArgument] != null &&
                    commandLine[Resources.GamesManagerArguments.FrameworkUpdateHashArgument]==null)
                {
                    Logger.Current.Write(LogInfoLevel.Error, "Framework update MD5 hash argument missing");
                    ViewFactory.Current.CreateView<IMessage>().Show("Framework update MD5 hash argument missing", "Missing argument");
                    return -1;
                }

                if (commandLine[Resources.GamesManagerArguments.UpdateGameArgument] != null &&
                    commandLine[Resources.GamesManagerArguments.GameUpdateHashArgument] == null)
                {
                    Logger.Current.Write(LogInfoLevel.Error, "Game update MD5 hash argument missing");
                    ViewFactory.Current.CreateView<IMessage>().Show("Game update MD5 hash argument missing", "Missing argument");
                    return -1;
                }

                if (!UACControl.IsAdmin())
                {
                    Logger.Current.Write(LogInfoLevel.Error, "Updating requires administrator access");
                    ViewFactory.Current.CreateView<IMessage>().Show("Updating requires administrator access", "Administrator access required");
                    return -1;
                }

                var presenter = new UpdateGamePresenter(
                    commandLine[Resources.GamesManagerArguments.UpdateGameArgument],
                    commandLine[Resources.GamesManagerArguments.GameUpdateHashArgument],
                    commandLine[Resources.GamesManagerArguments.UpdateFrameworkArgument],
                    commandLine[Resources.GamesManagerArguments.FrameworkUpdateHashArgument]);
                presenter.ShowView();
                Application.Run(presenter.View as Form);

                Process.Start(Resources.FrameworkUpdaterExecutable, Resources.GamesManagerBootArguments(string.Empty,string.Empty,string.Empty,string.Empty));
            }
            else
            {
                Logger.Current.Write(LogInfoLevel.Info, "Launching game...");
                var presenter = new LaunchGamePresenter(commandLine[Resources.GamesManagerArguments.NoUpdateCheckArgument] == null);
                presenter.ShowView();
                Application.Run(presenter.View as Form);
            }

            return 0;
        }
        public void TestInstallLocalUpdateToInstalledGame()
        {
            //lets pretend that this game is already installed.
            FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game").Create();
            FileSystem.Current.GetFile("c:\\program files\\MGDF\\game\\game.json").WriteText(ReadTextFile("console.json"));
            FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game\\content").Create();
            FileSystem.Current.GetFile("c:\\program files\\MGDF\\game\\content\\test.json").WriteText("blah");
            Registry.Current.CreateSubKey(BaseRegistryKey.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MGDF1_Console");

            MockArchiveFile archive = new MockArchiveFile(null, "C:\\Documents and Settings\\user\\desktop\\game.zip");
            new MockArchiveFile(archive, "game.json", @"{
              ""gameuid"":""Console"",
              ""gamename"":""Lua Console"",
              ""description"":""A Lua command console for interacting with the MGDF system"",
              ""version"":""1.0.0.0"",
              ""interfaceversion"":""1"",
              ""developeruid"":""no-8"",
              ""developername"":""no8 interactive"",
              ""homepage"":""http://www.junkship.org"",
              ""gamesourceservice"":""http://games.junkship.org/gamesource.asmx"",
              ""statisticsservice"":""http://statistics.junkship.org/statisticsservice.asmx"",
              ""statisticsprivacypolicy"":""We wont use ur informationz"",
              ""supportemail"":""*****@*****.**""
            }");
            new MockArchiveFile(archive, "update.json", ReadTextFile("update.json"));
            new MockArchiveFile(archive, "content");
            new MockArchiveFile(archive, "bin");
            ((MockArchiveFactory)ArchiveFactory.Current).VirtualArchives.Add("C:\\Documents and Settings\\user\\desktop\\game.zip", archive);

            GameInstall install = new GameInstall("C:\\Documents and Settings\\user\\desktop\\game.zip");
            Assert.IsTrue(install.IsValid);

            GameUpdater updater = new GameUpdater(install);
            updater.Start();

            //check that all the games content was copied across
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game").Exists);
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\program files\\MGDF\\game\\game.json").Exists);
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game\\content").Exists);
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\program files\\MGDF\\game\\bin").Exists);
            //did the update remove the file specified
            Assert.IsFalse(FileSystem.Current.GetFile("c:\\program files\\MGDF\\game\\content\\test.json").Exists);

            Game game = new Game("c:\\program files\\MGDF\\game\\game.json");
            Assert.IsTrue(game.IsValid);

            GameRegistrar registrar = new GameRegistrar(true, game);
            registrar.Start();

            //assert the shortcuts are in the right place
            var key = Registry.Current.OpenSubKey(BaseRegistryKey.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MGDF1_Console");
            Assert.IsNotNull(key);
            Assert.AreEqual("c:\\program files\\MGDF\\resources\\gamesystemicon.ico", key.GetValue("DisplayIcon"));
            Assert.AreEqual("Lua Console", key.GetValue("DisplayName"));
            Assert.AreEqual("http://www.junkship.org", key.GetValue("URLInfoAbout"));
            Assert.AreEqual(1, key.GetDwordValue("NoModify"));
            Assert.AreEqual(1, key.GetDwordValue("NoRepair"));
            Assert.AreEqual("no8 interactive", key.GetValue("Publisher"));
            Assert.AreEqual("c:\\program files\\MGDF\\game", key.GetValue("InstallLocation"));
            Assert.AreEqual("1.0.0.0", key.GetValue("DisplayVersion"));

            //assert the shortcuts are in the right place
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\desktop\\Lua Console.lnk").Exists);
            Assert.IsTrue(FileSystem.Current.GetDirectory("c:\\Documents and Settings\\user\\start menu\\no8 interactive").Exists);
            Assert.IsTrue(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\start menu\\no8 interactive\\Lua Console.lnk").Exists);

            registrar = new GameRegistrar(false, game);
            registrar.Start();

            //assert the registry key has been removed
            key = Registry.Current.OpenSubKey(BaseRegistryKey.LocalMachine, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MGDF1_Console");
            Assert.IsNull(key);

            //shortcuts should have been removed
            Assert.IsFalse(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\desktop\\Lua Console.lnk").Exists);
            Assert.IsFalse(FileSystem.Current.GetFile("c:\\Documents and Settings\\user\\start menu\\no8 interactive\\Lua Console.lnk").Exists);
        }