Сохранение настроек Visual Studio
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 23.08.05 14:12
Оценка: 72 (7)
#Имя: FAQ.tools.vssettings
Небольшая такая утититка
vssettings.exe

using System;
using System.Diagnostics;
using System.IO;

namespace VsSettings
{
    /// <summary>
    /// VsSettings
    /// </summary>
    class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static int Main(string[] args)
        {
            //
            // Copyright information and usage information, if required
            DisplayCopyrightInformation();
            if(args.GetLength(0) != 2)
            {
                DisplayUsageInformation();
                return 1;
            } // if

            //
            // We can either r[estore] or s[ave] settings
            string mode = args[0].ToUpper();
            if("-S" == mode || "/S" == mode || "-SAVE" == mode || "/SAVE" == mode)
                SaveSettings(args[1]);
            else if("-R" == mode || "/R" == mode || "-RESTORE" == mode || "/RESTORE" == mode)
                RestoreSettings(args[1]);

            return 0;
        }

        /// <summary>
        /// Restores settings from path
        /// </summary>
        /// <param name="path">Folder path to restore settings from</param>
        private static void RestoreSettings(string path)
        {
            Console.WriteLine("Восстановление настроек из {0}...", path);

            //
            // Importing registry settings from
            // _localmachinevisualstudio.reg
            // _currentuservisualstudio.reg
            ImportRegistryKey(Path.Combine(path, "_localmachinevisualstudio.reg"));
            ImportRegistryKey(Path.Combine(path, "_currentuservisualstudio.reg"));

            //
            // Copying files from 
            // _ApplicationDataSetting
            // _LocalApplicationDataSettings
            string applicationDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string localSettingsPath = 
                Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            CopyDirectory(Path.Combine(path, "_ApplicationDataSettings"),
                Path.Combine(applicationDataPath, "Microsoft\\VisualStudio"));
            CopyDirectory(Path.Combine(path, "_LocalApplicationDataSettings"), 
                Path.Combine(localSettingsPath, "Microsoft\\VisualStudio"));
        }

        /// <summary>
        /// Saves Visual Studio settings to path
        /// </summary>
        /// <param name="path">Folder path to save settings to</param>
        private static void SaveSettings(string path)
        {
            Console.WriteLine("Сохранение настроек в {0}...", path);

            //
            // Creating destination folder
            if(!Directory.Exists(path))
                Directory.CreateDirectory(path);

            //
            // Copying files from 
            // Application Data\Microsoft\VisualStudio
            // Local Settings\Application Data\Microsoft\VisualStudio
            string applicationDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string localSettingsPath = 
                Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
            CopyDirectory(Path.Combine(applicationDataPath, "Microsoft\\VisualStudio"),
                Path.Combine(path, "_ApplicationDataSettings"));
            CopyDirectory(Path.Combine(localSettingsPath, "Microsoft\\VisualStudio"),
                Path.Combine(path, "_LocalApplicationDataSettings"));

            //
            // Exporting registry keys
            // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio
            // HKEY_CURRENT_USER\Software\Microsoft\VisualStudio
            string localMachineVisualStudioReg = Path.Combine(path, "_localmachinevisualstudio.reg");
            string currentUserVisualStudioReg = Path.Combine(path, "_currentuservisualstudio.reg");

            ExportRegistryKey("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio",
                localMachineVisualStudioReg);
            ExportRegistryKey("HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\VisualStudio",
                currentUserVisualStudioReg);
        }

        /// <summary>
        /// Exports registryKey to fileName
        /// </summary>
        /// <param name="registryKey"></param>
        /// <param name="fileName"></param>
        private static void ExportRegistryKey(string registryKey, string fileName)
        {
            Process.Start("regedt32.exe", "/e " + fileName 
                + " " + registryKey).WaitForExit();
        }

        /// <summary>
        /// Silently imports registry settings from fileName
        /// </summary>
        /// <param name="fileName"></param>
        private static void  ImportRegistryKey(string fileName)
        {
            Process.Start("regedt32.exe", "/s " + fileName).WaitForExit();
        }

        /// <summary>
        /// Displays Usage information
        /// </summary>
        private static void DisplayUsageInformation()
        {
            Console.WriteLine("\nИспользование:\n\tVSSETTINGS <mode> <folder>\n");
            Console.WriteLine("\nГде:\n\t<mode>:");
            Console.WriteLine("\t-s - Сохранение настроек в папке <folder>");
            Console.WriteLine("\t-r - Восстановление настроек из папки <folder>");
        }

        /// <summary>
        /// Displays copyright information
        /// </summary>
        private static void DisplayCopyrightInformation()
        {
            Console.WriteLine("VsSettings");
            Console.WriteLine("(C) 2005 Нахлобуч. Используйте на свой страх и риск :)");
        }

        /// <summary>
        /// Performs a deep copy of directories from sourcePath to targetPath
        /// </summary>
        /// <param name="sourcePath"></param>
        /// <param name="targetPath"></param>
        public static void CopyDirectory(string sourcePath,string targetPath)
        {
            //
            // Appending a "platform-specific character used to 
            // separate directory levels"
            if(!targetPath.EndsWith(Path.DirectorySeparatorChar.ToString()))
                targetPath += Path.DirectorySeparatorChar;

            //
            // Creating target directory
            if(!Directory.Exists(targetPath))
                Directory.CreateDirectory(targetPath);

            //
            // Retrieving file system entries and iterating through
            // the collection
            string[] fileSystemEntries = Directory.GetFileSystemEntries(sourcePath);
            foreach(string entry in fileSystemEntries)
            {
                //
                // Either recursively call ourselves for subdirectories,
                // or just copy file
                if(Directory.Exists(entry))
                    CopyDirectory(entry, targetPath + Path.GetFileName(entry));
                else
                    File.Copy(entry, targetPath + Path.GetFileName(entry), true);
            } // foreach
        }
    }
}
HgLab: Mercurial Server and Repository Management for Windows
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.