Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.30;
Скачать: CL | DM;

Вниз

Windows 7   Найти похожие ветки 

 
faiwer ©   (2010-11-12 18:31) [0]

Доброго времени суток. Возник вопрос, так сказать, касательно прав доступа в вин7.

1. Есть программа-сервер. Должна запускаться автоматически вместе с ОС, и ей нужны права администратора (чтение и запись в HKLM и право на запись в своей папке, а не в аппдата). Суть программы - делает бэкап БД. Как лучше это реализовать? На данный момент просто задал ей "выполнять эту программу от имени администратора", но я сделал это "ручками", а надо как то встроить в инсталлер. Инсталлер запускается от имени администратора. Как лучше поступить в такой ситуации?

2. Есть программа-клиент, прав администратора не нужно. Но нужно где то хранить настройки для all-user (не для каждого в отдельности, а сразу для всех). Есть ли права у любого юзера на запись в "\Users\All Users". На своей машине проверить не могу, ибо с правами у меня давно какая то котовасия :) Или есть способ "правильнее"?


 
faiwer ©   (2010-11-12 18:34) [1]

Забыл уточнить. Программе-серверу нужны для работы права администратора вне зависимости от прав текущего пользователя. Ей это нужно как то разрешить при инсталляции, когда права есть на всё :)


 
clickmaker ©   (2010-11-12 19:01) [2]

1. Сервис
2. ini в папке программы


 
DVM ©   (2010-11-12 19:03) [3]


> faiwer ©   (12.11.10 18:31) 


> Суть программы - делает бэкап БД. Как лучше это реализовать?

Сервис? А вообще такая программа-сервис уже есть - планировщик задач, пущай он и запускает твою с нужными правами.


> Но нужно где то хранить настройки для all-user

CSIDL_COMMON_APPDATA или по-новому FOLDERID_ProgramData


 
faiwer ©   (2010-11-12 19:05) [4]


> 1. Сервис
> 2. ini в папке программы

1. Good, почитаемс, давно хотел коснуться этой темы
2. В папке программы нельзя, ибо нет прав доступа, сейчас у меня как раз так и реализовано :)


> CSIDL_COMMON_APPDATA или по-новому FOLDERID_ProgramData

Спс, почитаемс...


 
DVM ©   (2010-11-12 19:06) [5]


> 2. ini в папке программы

Самый удобный вариант, но если программа окажется в Program Files, ее настройки в Windows 7 окажутся черт знает где (в профиле пользователя где то там подпапка Virtual Store), и всем пользователям точно не будут доступны.


 
DVM ©   (2010-11-12 19:14) [6]


> faiwer ©   (12.11.10 19:05) [4]


> Спс, почитаемс...

Дарю:


type
 TKnownFolderID = TGUID;

const
 // GUID: {62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}
 // Отображаемое имя: ProgramData
 // Тип папки: Реальная
 // Путь по-умолчанию: %ALLUSERSPROFILE% (%ProgramData%, %SystemDrive%\ProgramData)
 // CSIDL аналог: CSIDL_COMMON_APPDATA
 // Устаревшее имя: Application Data
 // Устаревший путь:  %ALLUSERSPROFILE%\Application Data
 FOLDERID_ProgramData: TKnownFolderID = "{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}";

function GetKnownFolderPath(const ID: TKnownFolderID): WideString;
type
 TSHGetKnownFolderPath = function(const rfid: TKnownFolderID; dwFlags: DWord;
   hToken: THandle; var ppSzPath: LPWSTR) : HResult; stdCall;
var
 hShell: HModule;
 SHGetKnownFolderPath: TSHGetKnownFolderPath;
 Buffer: LPWSTR;
begin
 Result := "";
 hShell := LoadLibrary("shell32.dll");
 if hShell > 0 then
   try
     @SHGetKnownFolderPath := GetProcAddress(hShell, "SHGetKnownFolderPath");
     if Assigned(SHGetKnownFolderPath) then
       if Succeeded(SHGetKnownFolderPath(ID, 0, 0, Buffer)) then
         try
           Result := Buffer;
         finally
           CoTaskMemFree(Buffer);
         end;
   finally
     FreeLibrary(hShell);
   end;
end;



 
clickmaker ©   (2010-11-12 19:14) [7]

> Суть программы - делает бэкап БД

а вообще нафига какие-то примочки? средствами СУБД разве нельзя периодически бэкапить?


 
faiwer ©   (2010-11-12 19:24) [8]


> а вообще нафига какие-то примочки? средствами СУБД разве
> нельзя периодически бэкапить?

Эмм.. СУБД Firebird. моя программа-сервер:
1. автоматически при запуске ОС делает бэкап
2. хранит некоторые количество бэкапов
3. делает бэкапы по требованию
4. восстанавливает БД из бэкапа

http://s012.radikal.ru/i319/1011/28/94e790fda5dc.jpg

В принципе можно поместить в планировщик какую-нибудь команду, которая будет делать бэкап, но в таком случае она будет переписывать существующий бэкап... Или я просто запутался


 
DVM ©   (2010-11-12 19:54) [9]


> но в таком случае она будет переписывать существующий бэкап.
> .. Или я просто запутался

В планировщик надо поместить не команду, а программу, вот и пусть она делает как надо именно тебе, хошь переписывает хошь не переписывает


 
faiwer ©   (2010-11-12 19:56) [10]


> В планировщик надо поместить не команду, а программу, вот
> и пусть она делает как надо именно тебе, хошь переписывает
> хошь не переписывает

Не, это как раз понятно. Так я и сделаю. Товарисч clickmaker намекает, что я пишу велосипед, и программа вообще не нужна


 
DVM ©   (2010-11-12 20:35) [11]


> faiwer ©   (12.11.10 19:56) [10]


> и программа вообще не нужна

Да очень может быть, надо просто внимательно изучить, что может программа резервного копирования, которую планировщик может тоже запускать, у нее широкие возможности. Т.е тебе нужен не только стандартный планировщик но и стандартная же программа резервного копирования.


 
Gu   (2010-11-13 05:49) [12]

http://delphimaster.net/view/2-1289530925/



Страницы: 1 вся ветка

Текущий архив: 2011.01.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
2-1289628270
Gu
2010-11-13 09:04
2011.01.30
TreeView, имя текущего элемента


15-1285267773
Rouse_
2010-09-23 22:49
2011.01.30
Немного музыки


2-1289487120
vegarulez
2010-11-11 17:52
2011.01.30
TWebbrowser, как определить активное поле формы.


2-1289455404
lehich
2010-11-11 09:03
2011.01.30
заголовок окна


15-1287098390
Германн
2010-10-15 03:19
2011.01.30
Шаблон для оператора case