Problem finding ppgsub directory

Support
2011-06-30
2013-05-28
  • 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


     
  • Noah Pivnick
    Noah Pivnick
    2011-08-07

    I'm getting the same behavior under the same circumstance with a similar environment.

    1. Tools > Password Generator …

    2. Toggle 'Generate using custom algorithm' radio button

    3. Select 'Pronounceable Password Generator (FIPS 181 based)' from drop down menu

    4. 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
    > ---------------------------

     
  • Niklas Vainio
    Niklas Vainio
    2011-08-13

    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.