Как узнать имя папки «Общие документы» на сетевом компьютере

#delphi #networking #unc #delphi-2006 #mapped-drive

#delphi #сеть #unc #delphi-2006 #подключенный диск

Вопрос:

Учитывая, что я запускаю EXE-файл (приложение D2006) на компьютере по сети, как я могу получить путь к папке commondocs на этом компьютере, учитывая, что EXE-файл мог быть вызван с помощью ярлыка UNC или ярлыка с отображенной буквой диска, а платформа удаленного компьютера не обязательно известна (но будет >= WinXP)?

Ситуация такова, что у клиента большое количество рассредоточенных компьютеров, и они не могут побеспокоиться об установке моего приложения на все компьютеры. Итак, что они делают, это устанавливают исполняемый файл где-нибудь в сети и предоставляют всем ярлык для этого. Кажется, это их уже вполне устраивает, и там нет никаких проблем.

По их просьбе я заставил приложение прочитать настройки из INI-файла, размещенного в той же папке, что и исполняемый файл. Я могу только предположить, что они настроили все так, что все пользователи могут записывать в эту папку, чтобы можно было сохранить INI-файл обратно.

Однако я хочу изменить это так, чтобы INI-файл считывался и сохранялся где-нибудь в дереве папок commondocs на удаленном компьютере, чтобы им не нужно было предоставлять доступ на запись к папке Program files.

Комментарии:

1. Я сомневаюсь, что вы сможете, потому что я думаю, что вам нужно войти в систему на компьютере, чтобы получить эту информацию.

2. Привет @Misha. К вопросу добавлена более подробная информация — спасибо R

3. «Ситуация такова, что у клиента большое количество рассредоточенных компьютеров, и они не могут побеспокоиться об установке моего приложения на все компьютеры». Если они могут управлять ими, они также могут управлять их программным обеспечением. Если они не могут управлять ими, что ж, у них проблема … 😉

Ответ №1:

Компьютер, на котором запущена ваша программа, является единственным компьютером, к которому у вас есть доступ. Компьютер, на котором хранится ваша программа, не имеет значения. Это просто дисковод. Возможно, она не работает под управлением Windows. Это может быть даже NAS, на котором вообще ничего не запущено.

Если клиент хочет, чтобы папка «Общие документы» файлового сервера действовала как папка «общие документы» для всех во всех клиентских системах, попросите системного администратора настроить общую папку на сервере, а затем настройте клиентов на использование этой удаленной папки в качестве папки «Общие документы». Для этого с вашей стороны не требуется специального программирования.

Чтобы получить папку «Общие документы» на компьютере, на котором выполняется ваша программа, вы можете вызвать любую из различных функций API, включая ShGetFolderPath . Вам нужно значение CSIDL CSIDL_COMMON_DOCUMENTS . Если вы вызываете SHGetKnownFolderPath вместо этого, используйте FOLDERID_PublicDocuments .

Комментарии:

1. Спасибо @Rob. Дело в том, что клиент не хочет иметь ничего общего с рабочими станциями. Все, что он хочет сделать, это установить приложение на сервер. Если бы установка приложения создавалась {pf}MyApp для исполняемого файла и {pf}MyAppApplication Data для INI-файла (и предоставляла {pf}MyAppApplication Data доступ к папке «все-изменить»), разве это не сработало бы? Я мог бы определить, где находится INI-файл, по пути к исполняемому файлу, у всех был бы доступ на чтение и запись к папке INI-файла, и никто не мог бы изменять какую-либо другую {pf} папку.

2. Да, это звучит как прекрасная альтернатива. Хорошая идея.