I have PPG 1.04 installed with KeePass 2.15 under Windows 7 SP1 (64 bit).
The ppgsub directory is C:\Program Files (x86)\KeePass Password Safe 2\ppgsub, and PronouncePwGen.plgx is in C:\Program Files (x86)\KeePass Password Safe 2\ (the same place as KeePass.exe) but somehow if I edit the settings on for the password generator, I frequently get this error, indicating that it's looking for ppgsub as a subdirectory of \Windows\System32. If I exit from KeePass and restart it, the plugin runs properly for a while, but after KeePass has been running a few hours, I always get this error.
************** Exception Text **************
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\system32\ppgsub'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
at System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)
at PronouncePwGen.PronounceablePwOptsForm.GetOptions(ProunouncePwGenProfile defaults)
at PronouncePwGen.PronounceablePwGenerator.GetOptions(String strCurrentOptions)
at KeePass.Forms.PwGeneratorForm.OnBtnCustomOpt(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
I had a similar problem on Ubuntu Linux (using Mono). I have copied the plugin in /usr/lib/keepass2. The plugin appends \ppgsub to the path, which is incorrect on Linux (should be /ppgsub). The path also seems to be relative to the directory where I started Keepass2 in (for example, if I started it in /tmp/, it would try to open /tmp/ppgsub).
This the error message:
System.IO.DirectoryNotFoundException: Directory '/usr/lib/keepass2\ppgsub' not found.
at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) in <filename unknown>:0
As a temporary fix, I created a symlink in /usr/lib:
sudo ln -s keepass2/ppgsub/ "keepass2\ppgsub"
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I'm going to release a fix for this soon for Windows environments. As for Linux, I cannot officially support it at the moment since I don't have a proper testing environment yet. However, I can attempt to fix this on Linux machines as well by looking for substitution files at ~/.pronouncepwgen instead.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Forgot to mention, in the meantime, there are a few workarounds. Downgrade to a previous version of the plugin, or, for Windows, edit your KeePass2 shortcut "Start In" field to point to the directory of KeePass.exe. For those that have the "Run KeePass at Windows startup" option checked, there is no way to change the start directory so you will need to downgrade for now.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I have PPG 1.04 installed with KeePass 2.15 under Windows 7 SP1 (64 bit).
The ppgsub directory is C:\Program Files (x86)\KeePass Password Safe 2\ppgsub, and PronouncePwGen.plgx is in C:\Program Files (x86)\KeePass Password Safe 2\ (the same place as KeePass.exe) but somehow if I edit the settings on for the password generator, I frequently get this error, indicating that it's looking for ppgsub as a subdirectory of \Windows\System32. If I exit from KeePass and restart it, the plugin runs properly for a while, but after KeePass has been running a few hours, I always get this error.
************** Exception Text **************
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\system32\ppgsub'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
at System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)
at PronouncePwGen.PronounceablePwOptsForm.GetOptions(ProunouncePwGenProfile defaults)
at PronouncePwGen.PronounceablePwGenerator.GetOptions(String strCurrentOptions)
at KeePass.Forms.PwGeneratorForm.OnBtnCustomOpt(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5446 (Win7SP1GDR.050727-5400)
CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
KeePass
Assembly Version: 2.1.5.16764
Win32 Version: 2.1.5.0
CodeBase: file:///C:/Program%20Files%20(x86)/KeePass%20Password%20Safe%202/KeePass.exe
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5446 (Win7SP1GDR.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5442 (Win7SP1GDR.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
KeePass.XmlSerializers
Assembly Version: 2.1.5.16764
Win32 Version: 2.1.5.16764
CodeBase: file:///C:/Program%20Files%20(x86)/KeePass%20Password%20Safe%202/KeePass.XmlSerializers.DLL
System.Runtime.Remoting
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
ClockWorkKeePassFirefoxImporter
Assembly Version: 2.1.3.17119
Win32 Version: 2.1.3.0
CodeBase: file:///C:/Program%20Files%20(x86)/KeePass%20Password%20Safe%202/ClockWork-FFtoKP-2.13/ClockWorkKeePassFirefoxImporter.dll
aEYJeOGV
Assembly Version: 1.0.4.23930
Win32 Version: 1.0.4.0
CodeBase: file:///C:/Users/<username>/AppData/Roaming/KeePass/PluginCache/ei0e0euaDEe0p5Xh_2.1.5.16764/aEYJeOGV.dll
System.Security
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Security/2.0.0.0__b03f5f7f11d50a3a/System.Security.dll
I'm getting the same behavior under the same circumstance with a similar environment.
Tools > Password Generator …
Toggle 'Generate using custom algorithm' radio button
Select 'Pronounceable Password Generator (FIPS 181 based)' from drop down menu
Click on settings icon
Windows 7 64bit
KeePass v2.16
PronouncePwGen v1.0.4
> ************** Exception Text **************
> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\system32\ppgsub'.
> at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
> at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
> at System.IO.DirectoryInfo.GetFiles(String searchPattern, SearchOption searchOption)
> at PronouncePwGen.PronounceablePwOptsForm.GetOptions(ProunouncePwGenProfile defaults)
> at PronouncePwGen.PronounceablePwGenerator.GetOptions(String strCurrentOptions)
> at KeePass.Forms.PwGeneratorForm.OnBtnCustomOpt(Object sender, EventArgs e)
> at System.Windows.Forms.Control.OnClick(EventArgs e)
> at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
> at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
> at System.Windows.Forms.Control.WndProc(Message& m)
> at System.Windows.Forms.ButtonBase.WndProc(Message& m)
> at System.Windows.Forms.Button.WndProc(Message& m)
> at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
> at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
>
>
> ************** Loaded Assemblies **************
> mscorlib
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5446 (Win7SP1GDR.050727-5400)
> CodeBase: file:///C:/Windows/Microsoft.NET/Framework64/v2.0.50727/mscorlib.dll
> ---------------------------
> KeePass
> Assembly Version: 2.1.6.16253
> Win32 Version: 2.1.6.0
> CodeBase: file:///C:/Program%20Files%20(x86)/KeePass%20Password%20Safe%202/KeePass.exe
> ---------------------------
> System.Windows.Forms
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5446 (Win7SP1GDR.050727-5400)
> CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
> ---------------------------
> System
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5442 (Win7SP1GDR.050727-5400)
> CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
> ---------------------------
> System.Drawing
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
> CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
> ---------------------------
> System.Xml
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
> CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
> ---------------------------
> System.Configuration
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
> CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
> ---------------------------
> KeePass.XmlSerializers
> Assembly Version: 2.1.6.16253
> Win32 Version: 2.1.6.16253
> CodeBase: file:///C:/Program%20Files%20(x86)/KeePass%20Password%20Safe%202/KeePass.XmlSerializers.DLL
> ---------------------------
> aEYJeOGV
> Assembly Version: 1.0.4.38524
> Win32 Version: 1.0.4.0
> CodeBase: file:///C:/Users/Noah/AppData/Roaming/KeePass/PluginCache/ei0e0euaDEe0p5Xh_2.1.6.16253/aEYJeOGV.dll
> ---------------------------
> aG7wZw7g
> Assembly Version: 2.1.0.99
> Win32 Version: 2.1.0.0
> CodeBase: file:///C:/Users/Noah/AppData/Roaming/KeePass/PluginCache/i6mjRCeSgUKfbeAO_2.1.6.16253/aG7wZw7g.dll
> ---------------------------
> r716NxAz
> Assembly Version: 2.1.0.38530
> Win32 Version: 0.9.1.0
> CodeBase: file:///C:/Users/Noah/AppData/Roaming/KeePass/PluginCache/wfyaJiLYVUaRkjMQ_2.1.6.16253/r716NxAz.dll
> ---------------------------
> System.Security
> Assembly Version: 2.0.0.0
> Win32 Version: 2.0.50727.5420 (Win7SP1.050727-5400)
> CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Security/2.0.0.0__b03f5f7f11d50a3a/System.Security.dll
> ---------------------------
I had a similar problem on Ubuntu Linux (using Mono). I have copied the plugin in /usr/lib/keepass2. The plugin appends \ppgsub to the path, which is incorrect on Linux (should be /ppgsub). The path also seems to be relative to the directory where I started Keepass2 in (for example, if I started it in /tmp/, it would try to open /tmp/ppgsub).
This the error message:
System.IO.DirectoryNotFoundException: Directory '/usr/lib/keepass2\ppgsub' not found.
at System.IO.Directory.GetFileSystemEntries (System.String path, System.String searchPattern, FileAttributes mask, FileAttributes attrs) in <filename unknown>:0
As a temporary fix, I created a symlink in /usr/lib:
sudo ln -s keepass2/ppgsub/ "keepass2\ppgsub"
I'm going to release a fix for this soon for Windows environments. As for Linux, I cannot officially support it at the moment since I don't have a proper testing environment yet. However, I can attempt to fix this on Linux machines as well by looking for substitution files at ~/.pronouncepwgen instead.
Forgot to mention, in the meantime, there are a few workarounds. Downgrade to a previous version of the plugin, or, for Windows, edit your KeePass2 shortcut "Start In" field to point to the directory of KeePass.exe. For those that have the "Run KeePass at Windows startup" option checked, there is no way to change the start directory so you will need to downgrade for now.
Version 1.0.4b has been released which fixes the bug for Windows and hopefully for Linux as well.