Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2012, 01:55   #1
lazaruslong
Новичок
Джуниор
 
Регистрация: 28.11.2012
Сообщений: 1
Радость Запуск cmd.exe из службы Windows 7,8

Доброго времени суток!

Задача тривиальная: есть файл, который нужно контролировать. Если он меняется (содержимое, права доступа, атрибуты), то подменять его на спрятанный в закромах и дополнительно изменять права доступа и атрибуты на стандартные.
Раньше справлялся с подобной задачей используя cmd скрипты + планировщик заданий, но решил перейти на новый уровень - создать контролирующую процедуру.
Она каждые n-минут проверяет файл и решает, что с ним делать: не менять, если он оригинальный; менять, если его подменили.

Я завис на проблеме сброса к стандартным прав доступа на файл и его родительскую директорию (подобно тому, что делает команда icacls C:\ВашаПапка /reset /T) поскольку при запуске службы и этой команды в ней ничего не происходит (хотя при запуке из консоли работает как часы).

Код:
            if (file1.Length == file2.Length) //сравнение файлов
            {
                AddLog("File OK! " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); //всё хорошо
            }
            else
            {
                AddLog("File NOT OK! " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); //нужно принимать меры
                Process.Start("cmd.exe", "/C " + "icacls C:\\Users\\%USERNAME%\\AppData\\Roaming\\target\\ /reset /T"); //сброс прав доступа
                Thread.Sleep(1000); //ждем 1 секунду
                File.SetAttributes(file1path, FileAttributes.Normal); //сброс атрибутов
                File.Delete(file1path); //удаляем нерадивый файлик
                File.Copy(file2path, file1path); //заменяем заранее приготовленным
                File.SetAttributes(file1path, FileAttributes.Hidden | FileAttributes.ReadOnly); //устанавливаем стандартные атрибуты
                Process.Start("cmd.exe", "/C " + "secedit /configure /db temp.sdb /cfg relutp.inf"); //устанавливаем стандартные права доступа
                AddLog("File changed at " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); //задача решена
            }
Прошу помочь решить подобную задачу, которая состоит в запуске нужного мне процесса из под службы Windows или хотя бы подскажите, как возможно делать подобный сброс с помощью DirectorySecurity или FileSecurity.

Заранее благодарю за помощь!

P.S. Пишется это дело в VS2010 на C# под Windows 7 или 8
lazaruslong вне форума Ответить с цитированием
Старый 28.11.2012, 11:34   #2
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

вообще то для таких дел есть FileSystemWatcher
подробная инфа тут ---> http://msdn.microsoft.com/ru-ru/libr...emwatcher.aspx
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск exe/dll при завершении работы windows 7 AdoL Windows 1 24.12.2010 10:21
Запуск службы Dot3svc -=Virus=- Общие вопросы Delphi 3 02.09.2010 14:51
Запуск программы из службы AlexandrSid Общие вопросы Delphi 0 16.04.2010 13:52
assembler запуск службы telnet heart Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 16.03.2009 18:12
cmd.exe DKbelRoma Работа с сетью в Delphi 6 09.09.2007 18:36