首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测AppData\LocalLow的位置

检测AppData\LocalLow的位置
EN

Stack Overflow用户
提问于 2010-12-21 05:49:52
回答 2查看 9.4K关注 0票数 13

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

我找到了一个使用以下命令的示例:

代码语言:javascript
复制
string folder = "c:\users\" + Environment.UserName + @"\appdata\LocalLow";

例如,它与c:users捆绑在一起,这似乎有点脆弱。

我试着用

代码语言:javascript
复制
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)

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

还有其他建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-21 07:45:20

Environment.SpecialFolder枚举映射到CSIDL,但LocalLow文件夹没有CSIDL。因此,您必须通过SHGetKnownFolderPath应用编程接口使用KNOWNFOLDERID

代码语言:javascript
复制
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);
票数 23
EN

Stack Overflow用户

发布于 2022-02-03 05:32:40

Thomas的答案是有效的,但对于某些用例来说是不必要的复杂。

一个快速的解决方案是:

代码语言:javascript
复制
string LocalLowPath = 
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData).Replace("Roaming","LocalLow");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4494290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档