Получить общий путь к рабочему столу in.NET
мне нужно хранить файлы на общем рабочем столе в Windows. Приложение является очень специальным приложением для одного специального ПК (подготовка устройства), поэтому пользователям, не являющимся техническими, было легко найти и изменить файл конфигурации. Теперь мы перешли на домен, и поскольку разные люди (с разными учетными записями) должны использовать программное обеспечение, оно должно быть в общем месте, видимом каждому пользователю. Поэтому, пожалуйста, не спрашивайте, почему это на рабочем столе ;)
раньше я просто использовал Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
. Есть несколько общих папок в SpecialFolder
перечисление, но общий рабочий стол, похоже, не существует. Я что-то упускаю, или мне нужно P/invoke SHGetSpecialFolderPath
С CSIDL_COMMON_DESKTOPDIRECTORY
?
5 ответов
Я думаю, вы должны использовать SHGetSpecialFolderPath
API, так как нет значения перечисления для "CommonDesktopDirectory". Вы не можете явно использовать значение CSIDL_COMMON_DESKTOPDIRECTORY
и Environment.SpecialFolder
, потому что GetFolderPath
метод проверяет, что значение в перечисление. Вот код GetFolderPath
метод (от рефлектор) :
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;
}
Так вы можете легко скопировать и приспособить часть которая вам...
для уточнения-под общим рабочим столом Вы имеете в виду C:\Documents а настройки\все пользователи\рабочий стол?
если да, то это уродливый Хак -
Dim c As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim comDesktop As String = c.Substring(0, c.LastIndexOf("\")) + "\Desktop"
вы можете использовать Windows Script Host-WshShell.Особых папок
http://msdn.microsoft.com/en-us/library/0ea7b5xe (VS.85).aspx
Сначала добавьте ссылку на"объектную модель Хоста скрипта Windows". Вы найдете это на вкладке COM диалогового окна "добавить ссылки".
using IWshRuntimeLibrary;
object commonUserDesktop = "AllUsersDesktop";
WshShell shell = new WshShellClass();
string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();
другой способ (да, он также уродлив и будет работать, вероятно, только на Windows XP, а не на Vista) читать значение из реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell папки, общий рабочий стол