我正在尝试找到该AppData\LocalLow
文件夹的路径.
我找到了一个使用的例子:
string folder = "c:\users\" + Environment.UserName + @"\appdata\LocalLow";
Run Code Online (Sandbox Code Playgroud)
这对于一个被绑定到c:
和users
这似乎有点脆弱.
我试着用
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Run Code Online (Sandbox Code Playgroud)
但这给了我AppData\Local
,由于应用程序运行的安全限制,我需要LocalLow.它也为我的服务用户返回空白(至少在附加到进程时).
还有其他建议吗?
Tho*_*que 21
该Environment.SpecialFolder
枚举映射到CSIDL
,但没有CSIDL
在LocalLow
文件夹中.所以你必须使用API ,KNOWNFOLDERID
而不是SHGetKnownFolderPath
API:
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);
Run Code Online (Sandbox Code Playgroud)