检测AppData \ LocalLow的位置

我正在尝试找到AppData\LocalLow文件夹的路径。

我找到了一个使用的例子:

 string folder = "c:\users\" + Environment.UserName + @"\appdata\LocalLow"; 

其中一个与c: ,对于看起来有点脆弱的users

我试着用

 Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 

但这给了我AppData\Local ,由于运行应用程序的安全限制,我需要LocalLow。 它也为我的服务用户返回空白(至少在附加到进程时)。

还有其他建议吗?

Environment.SpecialFolder枚举映射到CSIDL ,但LocalLow文件夹没有CSIDL 。 因此,您必须使用SHGetKnownFolderPath API来使用SHGetKnownFolderPath

 void Main() { Guid localLowId = new Guid("A520A1A4-1780-4FF6-BD18-167343C5AF16"); GetKnownFolderPath(localLowId).Dump(); } string GetKnownFolderPath(Guid knownFolderId) { IntPtr pszPath = IntPtr.Zero; try { int hr = SHGetKnownFolderPath(knownFolderId, 0, IntPtr.Zero, out pszPath); if (hr >= 0) return Marshal.PtrToStringAuto(pszPath); throw Marshal.GetExceptionForHR(hr); } finally { if (pszPath != IntPtr.Zero) Marshal.FreeCoTaskMem(pszPath); } } [DllImport("shell32.dll")] static extern int SHGetKnownFolderPath( [MarshalAs(UnmanagedType.LPStruct)] Guid rfid, uint dwFlags, IntPtr hToken, out IntPtr pszPath);