获取.NET中的常见桌面路径

时间:2009-08-11 08:48:08

标签: .net windows windows-shell

我需要将文件存储到Windows上的公共桌面。该应用程序是一个非常特殊的应用程序,适用于一个特殊的PC(设备准备),因此非技术用户必须很容易找到并修改配置文件。现在我们切换到一个域,因为不同的人(具有不同的帐户)应该使用该软件,它必须在一个共同的位置,每个用户都可以看到。所以请不要问为什么它在桌面上;)

以前,我刚刚使用过Environment.GetFolderPath(Environment.SpecialFolder.Desktop)SpecialFolder枚举中有几个常见文件夹,但普通桌面似乎不存在。我错过了什么,或者我是否必须使用SHGetSpecialFolderPath来调用CSIDL_COMMON_DESKTOPDIRECTORY

5 个答案:

答案 0 :(得分:2)

我认为您必须使用SHGetSpecialFolderPath API,因为“CommonDesktopDirectory”没有枚举值。您无法显式使用CSIDL_COMMON_DESKTOPDIRECTORY的值并将其强制转换为Environment.SpecialFolder,因为GetFolderPath方法会检查该值是否已在枚举中定义。这是GetFolderPath方法的代码(来自Reflector):

public static string GetFolderPath(SpecialFolder folder)
{
    if (!Enum.IsDefined(typeof(SpecialFolder), folder))
    {
        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, GetResourceString("Arg_EnumIllegalVal"), new object[] { (int) folder }));
    }
    StringBuilder lpszPath = new StringBuilder(260);
    Win32Native.SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, lpszPath);
    string path = lpszPath.ToString();
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
    return path;
}

因此,您可以轻松复制和调整您需要的部分......

答案 1 :(得分:0)

澄清 - 通用桌面是指C:\ Documents and Settings \ All Users \ Desktop?

如果是的话,这是一个丑陋的黑客 -

Dim c As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim comDesktop As String = c.Substring(0, c.LastIndexOf("\")) + "\Desktop"

答案 2 :(得分:0)

您可以使用Windows脚本宿主 - WshShell.SpecialFolders

http://msdn.microsoft.com/en-us/library/0ea7b5xe(VS.85).aspx

答案 3 :(得分:0)

首先,添加对“Windows脚本宿主对象模型”的引用。您可以在“添加引用”对话框的COM选项卡中找到它。

using IWshRuntimeLibrary;

object commonUserDesktop = "AllUsersDesktop";
WshShell shell = new WshShellClass();
string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();

答案 4 :(得分:0)

另一种方式(是的它也很难看,可能只在Windows XP上工作,而不是在Vista上) 是从注册表中读取值

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell文件夹,公用桌面