
KeePass 2.30
Protege tus contraseñas de forma segura
Hoy en día es necesario recordar muchas contraseñas. Se necesita una contraseña para el inicio de sesión de red de Windows, su cuenta de correo electrónico, contraseña FTP de su sitio web, contraseñas en línea (como cuenta de miembro sitio web), etc. etc. etc. La lista es interminable. Además, debe utilizar contraseñas diferentes para cada cuenta. Porque si se utiliza una sola contraseña en todas partes y alguien consigue esta contraseña usted tendrá un problema ... Un problema grave. El ladrón había de tener acceso a su cuenta de correo electrónico, página web, etc. inimaginable.
KeePass es un administrador de contraseñas de código abierto, el cual ayuda a administrar sus contraseñas de manera segura. Usted puede poner todas sus contraseñas en una base de datos, que está cerrada con una llave maestra o un archivo de claves. Por lo que sólo tiene que recordar una única contraseña maestra o seleccionar el archivo llave para abrir toda la base de datos. Las bases de datos son encriptados usando los mejores y más seguros algoritmos de cifrado actualmente conocidos (AES y Twofish).
Caracteristicas
- Seguridad fuerte
- Múltiples claves de usuario
- Accesibilidad portable y no requiere instalación
- Exporta a TXT, HTML, XML y CSV
- Importar desde muchos formatos de archivo
- Facil transferencia de Base de datos
- Soporte de Grupos de contraseñas
- Campos de tiempo y entradas adjuntas
- Auto-Tipeo, Global Auto-Tipeo Hot Key y arrastrar y soltar
- Intuitivo y seguro Manipulación de Portapapeles
- Búsqueda y Clasificación
- Soporte Multi-Lenguaje
- Fuerte generador de contraseñas aleatorias
- Plugin Arquitectura
- Código abierto
Si quieres ver capturas de imagenes del programa, entra a este enlace: KeePass screenshots
Codigo Fuente
Código:
/*
KeePass Password Safe - The Open-Source Password Manager
Copyright (C) 2003-2015 Dominik Reichl <dominik.reichl@t-online.de>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Threading;
using System.Security.AccessControl;
using System.Security.Principal;
using System.IO;
using System.Reflection;
using System.Resources;
using System.Diagnostics;
using KeePass.App;
using KeePass.App.Configuration;
using KeePass.DataExchange;
using KeePass.Forms;
using KeePass.Native;
using KeePass.Resources;
using KeePass.UI;
using KeePass.Util;
using KeePass.Util.Archive;
using KeePass.Util.XmlSerialization;
using KeePass.Ecas;
using KeePass.Plugins;
using KeePassLib;
using KeePassLib.Cryptography;
using KeePassLib.Cryptography.Cipher;
using KeePassLib.Cryptography.PasswordGenerator;
using KeePassLib.Keys;
using KeePassLib.Resources;
using KeePassLib.Security;
using KeePassLib.Serialization;
using KeePassLib.Translation;
using KeePassLib.Utility;
using NativeLib = KeePassLib.Native.NativeLib;
namespace KeePass
{
public static class Program
{
private const string m_strWndMsgID = "EB2FE38E1A6A4A138CF561442F1CF25A";
private static CommandLineArgs m_cmdLineArgs = null;
private static Random m_rndGlobal = null;
private static int m_nAppMessage = 0;
private static MainForm m_formMain = null;
private static AppConfigEx m_appConfig = null;
private static KeyProviderPool m_keyProviderPool = null;
private static KeyValidatorPool m_keyValidatorPool = null;
private static FileFormatPool m_fmtPool = null;
private static KPTranslation m_kpTranslation = new KPTranslation();
private static TempFilesPool m_tempFilesPool = null;
private static EcasPool m_ecasPool = null;
private static EcasTriggerSystem m_ecasTriggers = null;
private static CustomPwGeneratorPool m_pwGenPool = null;
private static ColumnProviderPool m_colProvPool = null;
private static bool m_bDesignMode = true;
#if DEBUG
private static bool m_bDesignModeQueried = false;
#endif
public enum AppMessage
{
Null = 0,
RestoreWindow = 1,
Exit = 2,
IpcByFile = 3,
AutoType = 4,
Lock = 5,
Unlock = 6,
AutoTypeSelected = 7
}
public static CommandLineArgs CommandLineArgs
{
get
{
if(m_cmdLineArgs == null)
{
Debug.Assert(false);
m_cmdLineArgs = new CommandLineArgs(null);
}
return m_cmdLineArgs;
}
}
public static Random GlobalRandom
{
get { return m_rndGlobal; }
}
public static int ApplicationMessage
{
get { return m_nAppMessage; }
}
public static MainForm MainForm
{
get { return m_formMain; }
}
public static AppConfigEx Config
{
get
{
if(m_appConfig == null) m_appConfig = new AppConfigEx();
return m_appConfig;
}
}
public static KeyProviderPool KeyProviderPool
{
get
{
if(m_keyProviderPool == null) m_keyProviderPool = new KeyProviderPool();
return m_keyProviderPool;
}
}
public static KeyValidatorPool KeyValidatorPool
{
get
{
if(m_keyValidatorPool == null) m_keyValidatorPool = new KeyValidatorPool();
return m_keyValidatorPool;
}
}
public static FileFormatPool FileFormatPool
{
get
{
if(m_fmtPool == null) m_fmtPool = new FileFormatPool();
return m_fmtPool;
}
}
public static KPTranslation Translation
{
get { return m_kpTranslation; }
}
public static TempFilesPool TempFilesPool
{
get
{
if(m_tempFilesPool == null) m_tempFilesPool = new TempFilesPool();
return m_tempFilesPool;
}
}
public static EcasPool EcasPool // Construct on first access
{
get
{
if(m_ecasPool == null) m_ecasPool = new EcasPool(true);
return m_ecasPool;
}
}
public static EcasTriggerSystem TriggerSystem
{
get
{
if(m_ecasTriggers == null) m_ecasTriggers = new EcasTriggerSystem();
return m_ecasTriggers;
}
}
public static CustomPwGeneratorPool PwGeneratorPool
{
get
{
if(m_pwGenPool == null) m_pwGenPool = new CustomPwGeneratorPool();
return m_pwGenPool;
}
}
public static ColumnProviderPool ColumnProviderPool
{
get
{
if(m_colProvPool == null) m_colProvPool = new ColumnProviderPool();
return m_colProvPool;
}
}
public static ResourceManager Resources
{
get { return KeePass.Properties.Resources.ResourceManager; }
}
public static bool DesignMode
{
get
{
#if DEBUG
m_bDesignModeQueried = true;
#endif
return m_bDesignMode;
}
}
/// <summary>
/// Main entry point for the application.
/// </summary>
[STAThread]
public static void Main(string[] args)
{
#if DEBUG
// Program.DesignMode should not be queried before executing
// Main (e.g. by a static Control) when running the program
// normally
Debug.Assert(!m_bDesignModeQueried);
#endif
m_bDesignMode = false; // Designer doesn't call Main method
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.DoEvents(); // Required
m_cmdLineArgs = new CommandLineArgs(args);
DpiUtil.ConfigureProcess();
#if DEBUG
string strInitialWorkDir = WinUtil.GetWorkingDirectory();
#endif
if(!CommonInit()) { CommonTerminate(); return; }
if(m_appConfig.Application.Start.PluginCacheClearOnce)
{
PlgxCache.Clear();
m_appConfig.Application.Start.PluginCacheClearOnce = false;
AppConfigSerializer.Save(Program.Config);
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.FileExtRegister] != null)
{
ShellUtil.RegisterExtension(AppDefs.FileExtension.FileExt, AppDefs.FileExtension.ExtId,
KPRes.FileExtName, WinUtil.GetExecutable(), PwDefs.ShortProductName, false);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.FileExtUnregister] != null)
{
ShellUtil.UnregisterExtension(AppDefs.FileExtension.FileExt, AppDefs.FileExtension.ExtId);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.PreLoad] != null)
{
// All important .NET assemblies are in memory now already
try { SelfTest.Perform(); }
catch(Exception) { Debug.Assert(false); }
MainCleanUp();
return;
}
/* if(m_cmdLineArgs[AppDefs.CommandLineOptions.PreLoadRegister] != null)
{
string strPreLoadPath = WinUtil.GetExecutable().Trim();
if(strPreLoadPath.StartsWith("\"") == false)
strPreLoadPath = "\"" + strPreLoadPath + "\"";
ShellUtil.RegisterPreLoad(AppDefs.PreLoadName, strPreLoadPath,
@"--" + AppDefs.CommandLineOptions.PreLoad, true);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.PreLoadUnregister] != null)
{
ShellUtil.RegisterPreLoad(AppDefs.PreLoadName, string.Empty,
string.Empty, false);
MainCleanUp();
return;
} */
if((m_cmdLineArgs[AppDefs.CommandLineOptions.Help] != null) ||
(m_cmdLineArgs[AppDefs.CommandLineOptions.HelpLong] != null))
{
AppHelp.ShowHelp(AppDefs.HelpTopics.CommandLine, null);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.ConfigSetUrlOverride] != null)
{
Program.Config.Integration.UrlOverride = m_cmdLineArgs[
AppDefs.CommandLineOptions.ConfigSetUrlOverride];
AppConfigSerializer.Save(Program.Config);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.ConfigClearUrlOverride] != null)
{
Program.Config.Integration.UrlOverride = string.Empty;
AppConfigSerializer.Save(Program.Config);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.ConfigGetUrlOverride] != null)
{
try
{
string strFileOut = UrlUtil.EnsureTerminatingSeparator(
UrlUtil.GetTempPath(), false) + "KeePass_UrlOverride.tmp";
string strContent = ("[KeePass]\r\nKeeURLOverride=" +
Program.Config.Integration.UrlOverride + "\r\n");
File.WriteAllText(strFileOut, strContent);
}
catch(Exception) { Debug.Assert(false); }
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.ConfigSetLanguageFile] != null)
{
Program.Config.Application.LanguageFile = m_cmdLineArgs[
AppDefs.CommandLineOptions.ConfigSetLanguageFile];
AppConfigSerializer.Save(Program.Config);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.PlgxCreate] != null)
{
PlgxPlugin.CreateFromCommandLine();
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.PlgxCreateInfo] != null)
{
PlgxPlugin.CreateInfoFile(m_cmdLineArgs.FileName);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.ShowAssemblyInfo] != null)
{
MessageService.ShowInfo(Assembly.GetExecutingAssembly().ToString());
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.MakeXmlSerializerEx] != null)
{
XmlSerializerEx.GenerateSerializers(m_cmdLineArgs);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.MakeXspFile] != null)
{
XspArchive.CreateFile(m_cmdLineArgs.FileName, m_cmdLineArgs["d"]);
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.Version] != null)
{
Console.WriteLine(PwDefs.ShortProductName + " " + PwDefs.VersionString);
Console.WriteLine(PwDefs.Copyright);
MainCleanUp();
return;
}
#if DEBUG
if(m_cmdLineArgs[AppDefs.CommandLineOptions.TestGfx] != null)
{
List<Image> lImg = new List<Image>();
lImg.Add(Properties.Resources.B16x16_Browser);
lImg.Add(Properties.Resources.B48x48_Keyboard_Layout);
ImageArchive aHighRes = new ImageArchive();
aHighRes.Load(Properties.Resources.Images_Client_HighRes);
lImg.Add(aHighRes.GetForObject("C12_IRKickFlash"));
if(File.Exists("Test.png"))
lImg.Add(Image.FromFile("Test.png"));
Image img = GfxUtil.ScaleTest(lImg.ToArray());
img.Save("GfxScaleTest.png", ImageFormat.Png);
return;
}
#endif
// #if (DEBUG && !KeePassLibSD)
// if(m_cmdLineArgs[AppDefs.CommandLineOptions.MakePopularPasswordTable] != null)
// {
// PopularPasswords.MakeList();
// MainCleanUp();
// return;
// }
// #endif
try { m_nAppMessage = NativeMethods.RegisterWindowMessage(m_strWndMsgID); }
catch(Exception) { Debug.Assert(NativeLib.IsUnix()); }
if(m_cmdLineArgs[AppDefs.CommandLineOptions.ExitAll] != null)
{
BroadcastAppMessageAndCleanUp(AppMessage.Exit);
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.AutoType] != null)
{
BroadcastAppMessageAndCleanUp(AppMessage.AutoType);
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.AutoTypeSelected] != null)
{
BroadcastAppMessageAndCleanUp(AppMessage.AutoTypeSelected);
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.OpenEntryUrl] != null)
{
string strEntryUuid = m_cmdLineArgs[AppDefs.CommandLineOptions.Uuid];
if(!string.IsNullOrEmpty(strEntryUuid))
{
IpcParamEx ipUrl = new IpcParamEx(IpcUtilEx.CmdOpenEntryUrl,
strEntryUuid, null, null, null, null);
IpcUtilEx.SendGlobalMessage(ipUrl);
}
MainCleanUp();
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.LockAll] != null)
{
BroadcastAppMessageAndCleanUp(AppMessage.Lock);
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.UnlockAll] != null)
{
BroadcastAppMessageAndCleanUp(AppMessage.Unlock);
return;
}
if(m_cmdLineArgs[AppDefs.CommandLineOptions.IpcEvent] != null)
{
string strName = m_cmdLineArgs[AppDefs.CommandLineOptions.IpcEvent];
if(!string.IsNullOrEmpty(strName))
{
string[] vFlt = KeyUtil.MakeCtxIndependent(args);
IpcParamEx ipEvent = new IpcParamEx(IpcUtilEx.CmdIpcEvent, strName,
CommandLineArgs.SafeSerialize(vFlt), null, null, null);
IpcUtilEx.SendGlobalMessage(ipEvent);
}
MainCleanUp();
return;
}
// Mutex mSingleLock = TrySingleInstanceLock(AppDefs.MutexName, true);
bool bSingleLock = GlobalMutexPool.CreateMutex(AppDefs.MutexName, true);
// if((mSingleLock == null) && m_appConfig.Integration.LimitToSingleInstance)
if(!bSingleLock && m_appConfig.Integration.LimitToSingleInstance)
{
ActivatePreviousInstance(args);
MainCleanUp();
return;
}
Mutex mGlobalNotify = TryGlobalInstanceNotify(AppDefs.MutexNameGlobal);
AutoType.InitStatic();
UserActivityNotifyFilter nfActivity = new UserActivityNotifyFilter();
Application.AddMessageFilter(nfActivity);
#if DEBUG
if(m_cmdLineArgs[AppDefs.CommandLineOptions.DebugThrowException] != null)
throw new Exception(AppDefs.CommandLineOptions.DebugThrowException);
m_formMain = new MainForm();
Application.Run(m_formMain);
#else
try
{
if(m_cmdLineArgs[AppDefs.CommandLineOptions.DebugThrowException] != null)
throw new Exception(AppDefs.CommandLineOptions.DebugThrowException);
m_formMain = new MainForm();
Application.Run(m_formMain);
}
catch(Exception exPrg)
{
// Catch message box exception;
// https://sourceforge.net/p/keepass/patches/86/
try { MessageService.ShowFatal(exPrg); }
catch(Exception) { Console.Error.WriteLine(exPrg.ToString()); }
}
#endif
Application.RemoveMessageFilter(nfActivity);
Debug.Assert(GlobalWindowManager.WindowCount == 0);
Debug.Assert(MessageService.CurrentMessageCount == 0);
MainCleanUp();
#if DEBUG
string strEndWorkDir = WinUtil.GetWorkingDirectory();
Debug.Assert(strEndWorkDir.Equals(strInitialWorkDir, StrUtil.CaseIgnoreCmp));
#endif
if(mGlobalNotify != null) { GC.KeepAlive(mGlobalNotify); }
// if(mSingleLock != null) { GC.KeepAlive(mSingleLock); }
}
/// <summary>
/// Common program initialization function that can also be
/// used by applications that use KeePass as a library
/// (like e.g. KPScript).
/// </summary>
public static bool CommonInit()
{
m_bDesignMode = false; // Again, for the ones not calling Main
int nRandomSeed = (int)DateTime.UtcNow.Ticks;
// Prevent overflow (see Random class constructor)
if(nRandomSeed == int.MinValue) nRandomSeed = 17;
m_rndGlobal = new Random(nRandomSeed);
InitEnvSecurity();
// try { NativeMethods.SetProcessDPIAware(); }
// catch(Exception) { }
try { SelfTest.TestFipsComplianceProblems(); }
catch(Exception exFips)
{
MessageService.ShowWarning(KPRes.SelfTestFailed, exFips);
return false;
}
// Set global localized strings
PwDatabase.LocalizedAppName = PwDefs.ShortProductName;
KdbxFile.DetermineLanguageId();
m_appConfig = AppConfigSerializer.Load();
if(m_appConfig.Logging.Enabled)
AppLogEx.Open(PwDefs.ShortProductName);
AppPolicy.Current = m_appConfig.Security.Policy.CloneDeep();
m_appConfig.Apply(AceApplyFlags.All);
m_ecasTriggers = m_appConfig.Application.TriggerSystem;
m_ecasTriggers.SetToInitialState();
string strHelpFile = UrlUtil.StripExtension(WinUtil.GetExecutable()) + ".chm";
AppHelp.LocalHelpFile = strHelpFile;
// InitEnvWorkarounds();
LoadTranslation();
CustomResourceManager.Override(typeof(KeePass.Properties.Resources));
return true;
}
public static void CommonTerminate()
{
#if DEBUG
Debug.Assert(ShutdownBlocker.Instance == null);
Debug.Assert(!SendInputEx.IsSending);
// GC.Collect(); // Force invocation of destructors
#endif
AppLogEx.Close();
EnableThemingInScope.StaticDispose();
}
private static void MainCleanUp()
{
IpcBroadcast.StopServer();
if(m_tempFilesPool != null) m_tempFilesPool.Clear();
EntryMenu.Destroy();
GlobalMutexPool.ReleaseAll();
CommonTerminate();
}
private static void InitEnvSecurity()
{
try
{
// Do not load libraries from the current working directory
if(!NativeMethods.SetDllDirectory(string.Empty)) { Debug.Assert(false); }
}
catch(Exception) { } // Throws on Unix and Windows < XP SP1
}
// internal static Mutex TrySingleInstanceLock(string strName, bool bInitiallyOwned)
// {
// if(strName == null) throw new ArgumentNullException("strName");
// try
// {
// bool bCreatedNew;
// Mutex mSingleLock = new Mutex(bInitiallyOwned, strName, out bCreatedNew);
// if(!bCreatedNew) return null;
// return mSingleLock;
// }
// catch(Exception) { }
// return null;
// }
internal static Mutex TryGlobalInstanceNotify(string strBaseName)
{
if(strBaseName == null) throw new ArgumentNullException("strBaseName");
try
{
string strName = "Global\\" + strBaseName;
string strIdentity = Environment.UserDomainName + "\\" +
Environment.UserName;
MutexSecurity ms = new MutexSecurity();
MutexAccessRule mar = new MutexAccessRule(strIdentity,
MutexRights.FullControl, AccessControlType.Allow);
ms.AddAccessRule(mar);
SecurityIdentifier sid = new SecurityIdentifier(
WellKnownSidType.WorldSid, null);
mar = new MutexAccessRule(sid, MutexRights.ReadPermissions |
MutexRights.Synchronize, AccessControlType.Allow);
ms.AddAccessRule(mar);
bool bCreatedNew;
return new Mutex(false, strName, out bCreatedNew, ms);
}
catch(Exception) { } // Windows 9x and Mono 2.0+ (AddAccessRule) throw
return null;
}
// internal static void DestroyMutex(Mutex m, bool bReleaseFirst)
// {
// if(m == null) return;
// if(bReleaseFirst)
// {
// try { m.ReleaseMutex(); }
// catch(Exception) { Debug.Assert(false); }
// }
// try { m.Close(); }
// catch(Exception) { Debug.Assert(false); }
// }
private static void ActivatePreviousInstance(string[] args)
{
if((m_nAppMessage == 0) && !NativeLib.IsUnix())
{
Debug.Assert(false);
return;
}
try
{
if(string.IsNullOrEmpty(m_cmdLineArgs.FileName))
{
// NativeMethods.PostMessage((IntPtr)NativeMethods.HWND_BROADCAST,
// m_nAppMessage, (IntPtr)AppMessage.RestoreWindow, IntPtr.Zero);
IpcBroadcast.Send(AppMessage.RestoreWindow, 0, false);
}
else
{
string[] vFlt = KeyUtil.MakeCtxIndependent(args);
IpcParamEx ipcMsg = new IpcParamEx(IpcUtilEx.CmdOpenDatabase,
CommandLineArgs.SafeSerialize(vFlt), null, null, null, null);
IpcUtilEx.SendGlobalMessage(ipcMsg);
}
}
catch(Exception) { Debug.Assert(false); }
}
// For plugins
public static void NotifyUserActivity()
{
if(Program.m_formMain != null) Program.m_formMain.NotifyUserActivity();
}
public static IntPtr GetSafeMainWindowHandle()
{
if(m_formMain == null) return IntPtr.Zero;
try { return m_formMain.Handle; }
catch(Exception) { Debug.Assert(false); }
return IntPtr.Zero;
}
private static void BroadcastAppMessageAndCleanUp(AppMessage msg)
{
try
{
// NativeMethods.PostMessage((IntPtr)NativeMethods.HWND_BROADCAST,
// m_nAppMessage, (IntPtr)msg, IntPtr.Zero);
IpcBroadcast.Send(msg, 0, false);
}
catch(Exception) { Debug.Assert(false); }
MainCleanUp();
}
private static void LoadTranslation()
{
string strLangFile = m_appConfig.Application.LanguageFile;
if(string.IsNullOrEmpty(strLangFile)) return;
string[] vLangDirs = new string[]{
AppConfigSerializer.AppDataDirectory,
AppConfigSerializer.LocalAppDataDirectory,
UrlUtil.GetFileDirectory(WinUtil.GetExecutable(), false, false)
};
foreach(string strLangDir in vLangDirs)
{
string strLangPath = UrlUtil.EnsureTerminatingSeparator(
strLangDir, false) + strLangFile;
try
{
// Performance optimization
if(!File.Exists(strLangPath)) continue;
XmlSerializerEx xs = new XmlSerializerEx(typeof(KPTranslation));
m_kpTranslation = KPTranslation.LoadFromFile(strLangPath, xs);
KPRes.SetTranslatedStrings(
m_kpTranslation.SafeGetStringTableDictionary(
"KeePass.Resources.KPRes"));
KLRes.SetTranslatedStrings(
m_kpTranslation.SafeGetStringTableDictionary(
"KeePassLib.Resources.KLRes"));
StrUtil.RightToLeft = m_kpTranslation.Properties.RightToLeft;
break;
}
// catch(DirectoryNotFoundException) { } // Ignore
// catch(FileNotFoundException) { } // Ignore
catch(Exception) { Debug.Assert(false); }
}
}
internal static bool IsDevelopmentSnapshot()
{
try
{
Assembly asm = Assembly.GetExecutingAssembly();
byte[] pk = asm.GetName().GetPublicKeyToken();
string strPk = MemUtil.ByteArrayToHexString(pk);
return !strPk.Equals("fed2ed7716aecf5c", StrUtil.CaseIgnoreCmp);
}
catch(Exception) { Debug.Assert(false); }
return false;
}
/* private static void InitEnvWorkarounds()
{
InitFtpWorkaround();
} */
/* private static void InitFtpWorkaround()
{
// http://support.microsoft.com/kb/2134299
// https://connect.microsoft.com/VisualStudio/feedback/details/621450/problem-renaming-file-on-ftp-server-using-ftpwebrequest-in-net-framework-4-0-vs2010-only
try
{
if((Environment.Version.Major >= 4) && !NativeLib.IsUnix())
{
Type tFtp = typeof(FtpWebRequest);
Assembly asm = Assembly.GetAssembly(tFtp);
Type tFlags = asm.GetType("System.Net.FtpMethodFlags");
Debug.Assert(Enum.GetUnderlyingType(tFlags) == typeof(int));
int iAdd = (int)Enum.Parse(tFlags, "MustChangeWorkingDirectoryToPath");
Debug.Assert(iAdd == 0x100);
FieldInfo fiMethod = tFtp.GetField("m_MethodInfo",
BindingFlags.Instance | BindingFlags.NonPublic);
if(fiMethod == null) { Debug.Assert(false); return; }
Type tMethod = fiMethod.FieldType;
FieldInfo fiKnown = tMethod.GetField("KnownMethodInfo",
BindingFlags.Static | BindingFlags.NonPublic);
if(fiKnown == null) { Debug.Assert(false); return; }
Array arKnown = (Array)fiKnown.GetValue(null);
FieldInfo fiFlags = tMethod.GetField("Flags",
BindingFlags.Instance | BindingFlags.NonPublic);
if(fiFlags == null) { Debug.Assert(false); return; }
foreach(object oKnown in arKnown)
{
int i = (int)fiFlags.GetValue(oKnown);
i |= iAdd;
fiFlags.SetValue(oKnown, i);
}
}
}
catch(Exception) { Debug.Assert(false); }
} */
}
}

uploaded.net - [code] KeePass 2.30