У меня такая же проблема.Вы случайно установили бета-версию Visual Studio 11?Я недавно сделал, и я заметил несколько различий в том, как 4.0 .dll, совместимые для этого работают с нашим кодом.Я все еще пытаюсь отследить проблему наверняка, но у меня не было этой проблемы до этого.
Редактировать:
После сравнения декомпилированных источников из 4.0 и 4.5 для GetFolderPath (и связанные), есть различия.Являются ли они источником проблемы ... Я пока не уверен.
Редактировать 2: Вот соответствующие изменения.Я работаю над тем, чтобы увидеть, получаю ли я разные результаты.[код удален]
Редактировать 3:
Я сейчас попытался вызвать SHGetFolderPath напрямую, что в конечном итоге и делает .NET Framework.Возвращает E_ACCESSDENIED (-2147024891 / 0x80070005).Я не знаю, что изменилось, где я получаю это в некоторых конкретных случаях, но не в других.
Редактировать 4:
Поскольку вы получаете пустую строку, вы можетехотите переключить свой код на использование SHGetFolderPath, чтобы вы могли получить HResult и хотя бы знать, что именно происходит.
void Main() {
Console.WriteLine( GetFolderPath( Environment.SpecialFolder.ApplicationData ) );
}
[System.Runtime.InteropServices.DllImport("shell32.dll")]
static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, uint dwFlags, StringBuilder pszPath);
private string GetFolderPath( Environment.SpecialFolder folder ) {
var path = new StringBuilder( 260 );
var hresult = SHGetFolderPath( IntPtr.Zero, (int) folder, IntPtr.Zero, 0, path );
Console.WriteLine( hresult.ToString( "X" ) );
return ( (object) path ).ToString( );
}