Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

В корзину из сервиса...   Найти похожие ветки 

 
sniknik ©   (2011-02-11 16:47) [0]

Написал функцию -
function ToTrash(const Names: string): integer;
//Names - список файлов разделяемый и завершаемый #0 (в конце требуется двойной #0, т.е. добавляем еще один к строковому)
//пример - ToTrash("C:\Test1.tst"#0"C:\Test2.tst"#0);
var
 SHFileOpStruct: TSHFileOpStruct;
begin
 with SHFileOpStruct do begin
   Wnd   := 0; //Handle; без показа диалога не нужно
   wFunc := FO_DELETE;
   pFrom := @Names[1];
   pTo   := nil;
   fFlags:= FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
   fAnyOperationsAborted:= false;
   hNameMappings        := nil;
   lpszProgressTitle    := nil;
 end;
 result:= SHFileOperation(SHFileOpStruct);
end;


Вызов такой -
 SaveToLog("Test ToTrash");
 iErr:= ToTrash(FileName+#0); //ставил и явно типа "C:\test.txt"
 if iErr > 0 then
   SaveToLog("ToTrash error - " + IntToStr(iErr));


Работает... пока в приложении. Но нужно из сервиса (смысл в том, что есть файлы которые иногда бывают нужны "ранней версии", если произошла ошибка и идет ее разбор). В корзину, откуда можно достать, было бы удобно... но вот из сервиса почему то это не срабатывает.
Т.е. файл просто удаляется и все, в логе вижу запись "Test ToTrash" и все, т.е. ошибки операции нет. И файла в корзине нет...

Пробовал запуск сервиса от имени пользователя под которым логинюсь, ставил взаимодействие с рабочим столом. Не помогает.

Вопрос, как быть?


 
Игорь Шевченко ©   (2011-02-11 20:46) [1]


> ошибки операции нет. И файла в корзине нет...


а как ты смотришь, что файла в корзине нет ?


 
sniknik ©   (2011-02-11 21:03) [2]

Открываю и смотрю, в винде по иконке кликаю...
На случай, что это из-за другого юзера - запускал сервис тем же кем логинился.

Кстати, проверил второй способ -
function ToTrash(const Names: string): integer;
var
 Info: TShellExecuteInfo;
begin
 FillMemory(@Info, SizeOf(Info), 0);
 with Info do begin
   cbSize  := SizeOf(Info);
   nShow   := SW_HIDE;
   lpFile  := Pchar(Names);
   fMask   := SEE_MASK_FLAG_NO_UI or SEE_MASK_INVOKEIDLIST or SEE_MASK_CLASSNAME or SEE_MASK_FLAG_DDEWAIT;
   lpVerb  := "delete";
 end;
 if ShellExecuteEx(@Info)
   then result:= 0
   else result:= GetLastError;
end;

Ситуация та же - ошибки нет, файла в корзине тоже. Но стоит запустить сервис как программу, и все начинает работать. ;(


 
sniknik ©   (2011-02-11 21:10) [3]

Попробовал сейчас Far-ом зайти в папку RECYCLER\и дальше в папке с именем по Sid-у. тоже не нашел... хотя удаленные в режиме программы там есть.


 
sniknik ©   (2011-02-11 21:14) [4]

> тоже не нашел...
AAAAA!!!! Нашел!, под "левым" именем, хотя вопрос тогда почему при запуске от того же юзера нету. Или вернее куда он его девает?

Ну да ладно, это уже детали. Спасибо.


 
Игорь Шевченко ©   (2011-02-11 21:35) [5]


> AAAAA!!!! Нашел!, под "левым" именем


вовремя заданный вопрос всегда действеннее десяти умных советов.


> хотя вопрос тогда почему при запуске от того же юзера нету


а какой SID при этом в токене процесса ?


 
Игорь Шевченко ©   (2011-02-11 21:36) [6]

и загружен ли профиль того пользователя ?


 
sniknik ©   (2011-02-11 21:53) [7]

> а какой SID при этом в токене процесса ?
Длинный... ;) Не помню, в домене было дело, юзер "ограниченный админ, под сеть", а сейчас дома и сид от "система" короткий/стандартный.
В понедельник просмотрю "тщательней".

> а какой SID при этом в токене процесса ?
А вот хз. возможно, что и нет на той машине. Там под ним могли только сервис запустить без "входа им в винду".


 
sniknik ©   (2011-02-11 22:05) [8]

> и загружен ли профиль того пользователя ?
В предыдущем посте второй абзац должен быть под этой ссылкой...

И ++ к этому, я же его (сервис)  под "собой" стартовал, и заходил собой (те профиль был), все одно файла не было. Хотя ладно, теперь ясно, что работает, понятно как, а уж куда оно прячет или ищу не там, разберусь как нибудь.


 
Игорь Шевченко ©   (2011-02-11 22:07) [9]

на всякий случай - у каждого пользователя своя корзина


 
Игорь Шевченко ©   (2011-02-11 22:17) [10]

и еще - пользователь, вошедший интерактивно и пользователь, от имени которого запущен сервис - это некоторая разница. Насколько мне известно, в том числе и в загрузке профиля :)


> Пробовал запуск сервиса от имени пользователя под которым
> логинюсь, ставил взаимодействие с рабочим столом


взаимодействие с рабочим столом можно поставить только для запуска с системной учетной записью, AFAIK.


 
KilkennyCat ©   (2011-02-12 00:39) [11]

у сервисов сид не зависит от текущего пользователя, насколько я понимаю.
и по идее правильно, что если профиль не загружен, то в корзину пользователя не упадет при всем желании.


 
KilkennyCat ©   (2011-02-12 01:08) [12]

вот, может как-то поможет:
http://www.installsetupconfig.com/win32programming/windowstationsdesktops13_4.html


 
sniknik ©   (2011-02-12 01:26) [13]

> то в корзину пользователя не упадет при всем желании.
Падает, если сервис стартовать от того под кем зашел. Дома получилось (хотя этого мне как раз и не надо, только ради проверки, наоборот хорошо, если будет "спрятано", главное знать где). Почему на работе не получалось вопрос... теперь то "задним умом" думаю, что там 2 моих одноименных юзера, локальный и доменный, потому и не находился. А думал, что не работает.


 
KilkennyCat ©   (2011-02-12 01:51) [14]


> если сервис стартовать от того под кем зашел

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


 
Leonid Troyanovsky ©   (2011-02-12 09:50) [15]


> sniknik ©   (11.02.11 16:47)  

> Написал функцию -
> function ToTrash(const Names: string): integer;

А зачем вдруг корзина?
Сделал бы контейнер для сервисных отходов.

--
Regards, LVT.


 
sniknik ©   (2011-02-12 11:58) [16]

> По идее, я бы и доступа к его корзине не получил бы, если захотел.
Проблема администрирования. Не моя. Пусть настраивают так чтобы доступ был.

> А зачем вдруг корзина?
Чтобы ЦТО не следить за этим делом, мне не делать и не описывать новую "фичу", ради инфы что раз в год/два, и то может быть.
Собственно, идея не моя, а ЦТО, и возникла по глупости...

В общем дело было так...
Приходит ЦТО-ник, говорит, я там ошибку у тебя в программе нашел (??? забыл когда они реально что-то находи)... при обновлении данных, говорит
- "ошибка разбора XML тег <br> в строке 1" ну что-то типа того.
- Ну так, ошибка XML! пришел с сервера не XML, а репорт об ошибке php, судя по тегу (php их под html форматирует). Посмотри сам, убедись, да и все.
- Нет, пошли покажу.
- Ну пошли.
Пришли
- Смотри файл.
А он вместо этого хватает мышку, и тыкает в меню на "обновить данные"... которые успешно обновляются и естественно стирают предыдущий. Типа хотел показать ошибку "в живую"... Ну вот, ошибкам в логах (косвенным) по какой причине файл не разобрался он не доверяет, то что тестовый сервер временами сбоит потому, что там что то тестят он сомневается, файл когда можно было не посмотрел, но вместо того чтобы признаться, что сглупил
- а что оно у тебя сразу удаляет? Почему не в корзину?
И главное написал заявку. А мне проще, сделать чем доказывать, что некоторым нужно чуть быстрее думать, и чуть медленнее руки "распускать".

Кстати этот перенос в корзину не основное действие, будет по настройке в ini, основное так и останется безусловное удаление.


 
Leonid Troyanovsky ©   (2011-02-12 13:01) [17]


> sniknik ©   (12.02.11 11:58) [16]

> А он вместо этого хватает мышку, и тыкает в меню на "обновить
> данные"... которые успешно обновляются и естественно стирают
> предыдущий.

Ну, если обновляться с клиента, то он может бросить старый файл
в корзину текущего юзера. И искать просто.

--
Regards, LVT.


 
sniknik ©   (2011-02-12 13:35) [18]

Работает сервис. Клиент это только "окно" пользователю, из которого идут запросы на действия.

> И искать просто.
Просто, но не нужно!
Зато становится вовсе не простым обновление кучи клиентов вместо 1-го сервиса. + Или безопасность нафиг (клиенту нужно будет открыть доступ к серверной базе), или делать каждому клиенту свою базу, тогда нафиг централизованность. ++ каждому клиенту тогда понадобятся свои сертификаты/доступ в инет, т.к. своя база подразумевает автономную работу. +++ настройка из 1 места "плодится" на сотню. И т.д. ++++ +++++ .... ИЗ-ЗА ФИГНИ!


 
KilkennyCat ©   (2011-02-12 13:53) [19]

забавно. лога более чем достаточно. скажи ему, что ему череп жмет.


 
Leonid Troyanovsky ©   (2011-02-12 13:58) [20]


> sniknik ©   (12.02.11 13:35) [18]

> Зато становится вовсе не простым обновление кучи клиентов
> вместо 1-го сервиса. + Или безопасность нафиг

AFAIK, запрет интерактивности сервисов возник
благодаря заботе о безопасности.

--
Regards, LVT.


 
sniknik ©   (2011-02-12 15:05) [21]

> AFAIK, запрет интерактивности сервисов возник благодаря заботе о безопасности.
Откуда взял, что нарушается запрет на интерактивность? Как раз и не хочу...
Пока все честно, стандартным протоколом... сервис = http сервер, с единственной "дыркой" 443-порт (по умолчанию), все запросы к нему по ssl каналу. Любое добавление это добавление "дырок". Причем без шифрации.

Особенно совет обновляться с клиента (получается в обход сервиса/левыми методами) только ради простоты поиска в корзине, файла который даже не нужен если по нормальному... нонсенс в общем.


 
Leonid Troyanovsky ©   (2011-02-12 15:20) [22]


> sniknik ©   (12.02.11 15:05) [21]

Спокойствие, только спокойствие.
Чес-говоря, не понял,
ничего не понял - очень быстро.

--
Regards, LVT.


 
sniknik ©   (2011-02-12 15:49) [23]

Что тут непонятного? К примеру.
Браузером пользуешься? Вот это клиент. А серверный движок, например "друпал", это сервис. Обновляемые данные это файл с новостями которые "друпал" в свою базу затягивает и после в html преобразовывает и тому клиенту на отображение отдает.
Сам файл больше не нужен. Он остается только для возможности сравнить, "а правильно ли движок (не клиент! там только кнопку нажали) его в базу затянул, т.е. вот тут криво отформатировано это от кривизны движка, или того, что в данные разные "теговые артефакты" вкрались.".
Клиент и сервер никак не связаны, у них нет(чаще всего) общих юзеров, кокзин, папок, файлов и т.д... Исключение только в редких случаях на тестах когда оба на одной машине.

И вот тут, когда кто то "профукал" возможность сравнить (уже не с чем, "на капу нажал, он улетел"), ни данных в базе нет, ни файла данных... на сервере (все на сервере, только отображение и рычаги на клиенте). Ты говоришь сделай удаление в корзину клиента...???? т.к. оттуда обновляют, "капу" там нажимают. А на клиенте ко всему прочему не то, что юзера серверного (его по любому), но и корзины может не быть... зашибись раскладец.


 
Leonid Troyanovsky ©   (2011-02-12 16:11) [24]


> sniknik ©   (12.02.11 15:49) [23]

> Что тут непонятного? К примеру.
> Браузером пользуешься? Вот это клиент.

Пользуюсь, нормальный клиент.

> Сам файл больше не нужен. Он остается только для возможности
> сравнить, "а правильно ли движок (не клиент! там только
> кнопку нажали) его в базу затянул, т.е. вот тут криво отформатировано
> это от кривизны движка, или того, что в данные разные "теговые
> артефакты" вкрались.".

Предлжил на служебную помойку отправить - ты игнорировал.

--
Regards, LVT.


 
sniknik ©   (2011-02-12 16:33) [25]

> ты игнорировал.
Не игнорировал, а не захотел эту "помойку" организовывать (ответ в - 2 абзац [16] пост), разные вещи. Т.к. сервис также идет клиентам, то и эта "организация" ложится на программу, либо в описательную часть, что сделать, как сделать/... поддержка. Пусть клиенты этим пользоваться и не будут но то, что сделано должно быть просто в использовании, и работоспособно. Но что будет гораздо сложнее маленькой процедурки в первом посте (осталось добавить нормальный ексепт с расшифровкой кодов словами и все).
Нес па?


 
Leonid Troyanovsky ©   (2011-02-13 08:53) [26]


> sniknik ©   (12.02.11 16:33) [25]

>  поддержка. Пусть клиенты этим пользоваться и не будут но
> то, что сделано должно быть просто в использовании, и работоспособно.
>  Но что будет гораздо сложнее маленькой процедурки в первом
> посте (осталось добавить нормальный ексепт с расшифровкой
> кодов словами и все).

Думаю, что ЦТО это тоже не удовлетворит, бо корзину надо чистить,
т.е., следить за этим, а ее еще поди найди /что сделать, как сделать/.

Я в похожем случае делал так: перед записью нового лога удалял
самый старый. Количество хранимых логов настраивал из реестра,
с умалчиваемым значением 10.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2011-02-13 11:03) [27]

> Leonid Troyanovsky  (13.02.2011 08:53:26)  [26]

Rotate, для любой системы имен


 
sniknik ©   (2011-02-13 14:36) [28]

Тогда уж, проще было бы оставить изначальное логирование этого файла, из под которого его "вывели" как раз по причине бесполезности старой версии (не соответствует текущим данным для возможно проверки которых которые он оставлен), и искать в папках логов сложнее чем в корне программы (сервиса), куда его также специально перевели. (не помню кто, но возможно то самое ЦТО инициировало "вывод")
Теперь из-за одного болвана, совершенно не нужный файл "возносится" в ранг "свято оберегаемого" и под него строится собственная система логирования. (с последующими возможными и постоянными объяснениями клиентам "да да вот этот файл, нет не смотрите на с номерами, вот тот который без, в нем актуальные данные, остальные не нужны", "нет, не может быть, у нас это давно работает, не может не совпадать ...... а зачем вы смотрите в файл номер 10?" и т.д.). Я же говорил ранее тем кому не нужно, от них лучше прятать. Спрятать в корзине ничуть не хуже других мест... Кто хочет, тот и корзину научится чистить не свою, не так уж это и сложно в папку RECYCLER заглянуть...

> Rotate, для любой системы имен
Не для любой, занятые имена "изымаются" из оборота. Что кстати может быть недостатком, т.к. юзер может(вправе) в папке программы сам копию этого/другого файла сделать при установке например, и совпавшим именем которого еще нет... через некоторое время его ждет "удивление".
Т.е. эти файлы придется описать в доке, т.к. они "на виду", и чтобы себя обезопасить от подобных курьезов.

Но вообще дельфимастер в своем амплуа... обсуждают, что угодно, только не тему... по показанному кусочку делают глобальные выводы о порочности системы в целом, о том что кого удовлетворит, не зная людей и ситуации. ... нда, хоть вообще ничего не спрашивай. :(


 
sniknik ©   (2011-02-13 14:51) [29]

> бо корзину надо чистить, т.е., следить за этим, а ее еще поди найди /что сделать, как сделать/.
Делаешь ярлычек на рабочем столе со стартом следующего -
%windir%\explorer.exe shell:RecycleBinFolder
после правой кнопкой мыши по нему и выбрать пункт меню - "Запуск от имени".
Выбираешь того от кого запущен сервис (у нас это специальная "админская" ограниченная учетка).

p.s. тоже мне бином Ньютона.


 
KilkennyCat ©   (2011-02-13 15:26) [30]


> Но вообще дельфимастер в своем амплуа... обсуждают, что
> угодно, только не тему... по показанному кусочку делают
> глобальные выводы о порочности системы в целом, о том что
> кого удовлетворит, не зная людей и ситуации. ... нда, хоть
> вообще ничего не спрашивай. :(

а ты как хотел? :) привыкать пора.
я бы помог, если б знал как, обычно твои вопросы попадают в категорию "узнать что-то полезное". Но я уже попробовал, там - муть.


 
sniknik ©   (2011-02-13 16:16) [31]

> я бы помог
Все уже решено, в 4 посте... все остальное в области решений/администрирования/администрирования (т.е. как это будет и будет ли реально сделано) вне компетенции данного (да и вообще) форумов.


 
KilkennyCat ©   (2011-02-13 17:45) [32]

ну так оно изначально так работало у тебя...
мне бы вот хотелось посмотреть, как можно работать с пользовательскими ресурсами из сервиса до загрузки профиля.


 
sniknik ©   (2011-02-13 18:53) [33]

> как можно работать с пользовательскими ресурсами из сервиса до загрузки профиля.
Какая разница? Профиля под "локал систем" вообще нет/не загружен... тем не менее корзина его есть... (короткий сид 7 пост. с в папке RECYCLER его сразу видно).

Но вообще это уже твой вопрос... у меня таких задач не стояло, типа из сервиса у текущего юзера/в открытом профиле что-то сделать, хотя у Rouse вроде подобный пример был.
У меня если не настраивается/админится значит нельзя.


 
sniknik ©   (2011-02-13 18:55) [34]

http://rouse.drkb.ru/winapi.php#servicenotifyer
Доступ из сервиса к рабочему столу.


 
sniknik ©   (2011-02-13 19:00) [35]

Как понял, запуск RunAs себя же, под текущим юзером, для нужных действий. (параметром передавать). Вполне способ.


 
Leonid Troyanovsky ©   (2011-02-13 19:06) [36]


> sniknik ©   (13.02.11 14:36) [28]

> нужно, от них лучше прятать. Спрятать в корзине ничуть не
> хуже других мест... Кто хочет, тот и корзину научится чистить
> не свою, не так уж это и сложно в папку RECYCLER заглянуть.

Ну, дык и прячь до разборок. Только не в корзине.
Они ж тебе ее и предъявят, на предмет чистки.


> Делаешь ярлычек на рабочем столе со стартом следующего -
> %windir%\explorer.exe shell:RecycleBinFolder
> после правой кнопкой мыши по нему и выбрать пункт меню -
>  "Запуск от имени".

Передай, плиз, что тебе завтра скажут цтошники.

--
Regards, LVT.


 
KilkennyCat ©   (2011-02-13 19:15) [37]


> sniknik ©   (13.02.11 18:55) [34]

спасибо.
надо запомнить. а то потом ведь потребуется....


 
sniknik ©   (2011-02-13 19:39) [38]

> Передай, плиз, что тебе завтра скажут цтошники.
Плевать, что они скажут. Хотя я догадываюсь... пробурчат что-то невразумительное и "спустят на тормозах".
Главное заявку не отменят, останется в том виде, что сейчас, т.к. отмена была бы как очередное признание того, что "сглупил", еще раз, а он и первый раз признаться не смог, второй раз и подавно.

p.s. Сам думал, и больше склоняюсь к тому, чтобы восстановить его логирование... самый оптимальный вариант был. Оставляя последний в корне, как сейчас. Не искать то, что хоть как то нужно, и ненужная "история" "с глаз долой" но доступна "на крайняк". И нашим и вашим в общем.


 
Германн ©   (2011-02-14 03:11) [39]


> p.s. Сам думал, и больше склоняюсь к тому, чтобы восстановить
> его логирование

Ну и что помешало?
Логгирование - наша волшебная палочка!
Нужно только правильно ею пользоваться.

> Плевать, что они скажут. Хотя я догадываюсь... пробурчат
> что-то невразумительное и "спустят на тормозах"

А мы им в ответ логи. А с ним трудно поспорить.
Во-первых "они" там (в логах) ничего не поймут.
А во-вторых всё-таки логи позволяют "ткнуть носом в грязь", если кто-то что-то поймёт.


 
sniknik ©   (2011-02-14 08:00) [40]

> Ну и что помешало?
А ты тему читал? ЗАЯВКА! На определенное действие. Мое имхо тут дело десятое.
Мой пост [38], вовсе не значит, что будет сделано так. А с учетом того, что убирали его тоже по каким то причинам(например желанием кого то навязать именно свое решение), то если про них вспомнят... фигня, выльется в очередную проблему. Фактически почти как на дельфимастере...

> А мы им в ответ логи. А с ним трудно поспорить.
А ты тему читал? Логи есть. По действиям/ошибкам. Но ошибка "невозможность разобрать файл по причине ..." <> самому файлу. И "ткнутие носом в грязь" единственное к чему приводит это - "мало ли что ты там в лог понаписал", хотя туда попадает ексепт от IDOM документа "as is".



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

Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.06 c
15-1336720167
alexdn
2012-05-11 11:09
2013.03.22
Что первое?


15-1339590107
Хригорий
2012-06-13 16:21
2013.03.22
Что такое нативный язык программирования?


15-1348811854
MonoLife
2012-09-28 09:57
2013.03.22
Подскажите по проектировке таблиц БД.


15-1340687560
AV
2012-06-26 09:12
2013.03.22
Что то пропустил, как так можно делать?


15-1339746265
ProgRAMmer Dimonych
2012-06-15 11:44
2013.03.22
Диаграмма сетевого взаимодействия





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский