Небольшая такая утититка
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
}
}
}