| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Почему вылетает ошибка Thread creation error? |
| Автор: nod3264 3.2.2010, 10:02 | ||||||||
| Есть необходимость написать программу, которая не даст работникам сидеть в аське, или играть в игры. У людей и так полно работы, а вместо работы они занимаются фигнёй. В начале я написал такое приложение, но некоторые продвинутые работники просто убивали процесс. Потом я сделал процесс системным, через сервис, но и это их не остановило. Пытался делать 2 процесса, которые контролируют и запускают друг друга. Но это тоже не эффективно. Вот решил убрать совсем процесс с глаз работников, нашел в сети код:
Проблема вот в чём, когда я таким образом запускаю exe с таким кодом:
То в начале показывается сообщение "Запускаем поток", и после этого вылетает ошибка!
и сразу после этого
Пытался делать поток через BeginThread, но ошибка осталась прежней. На всех машинах у нас стоит Windows 7. Подскажите в чём проблема, почему вылетает эта ошибка? |
| Автор: Alca 3.2.2010, 20:19 |
| Ты главное пытайся.... |
| Автор: nod3264 3.2.2010, 20:50 |
| А если по теме, подсказать можешь причину этой ошибки? |
| Автор: Alca 3.2.2010, 23:07 |
| Ты это http://forum.vingrad.ru/forum/topic-60076/view-all.html читал? |
| Автор: nod3264 4.2.2010, 08:35 |
| Читал. Ошибка есть только когда в другом процессе свой exe запускаю, а так всё нормально. |
| Автор: Alca 4.2.2010, 10:18 |
| MyThread:=TMyThread.Create(true); //создать в приостановленном состоянии MyThread.FreeOnTerminate := false; //не самоубивающийся поток MyThread.Execute; MyThread.Resume; //запустить поток MyThread.WaitFor; //ждемс когда поток отработает |
| Автор: nod3264 4.2.2010, 10:50 | ||||||
Вот код exe который запускаю в другом процессе:
Чтобы запустить в другом процессе делаю так: 1. Из этого exe делаю файл ресурса. 2. Использую код который я нашел ранее в сети (выложил в первом сообщении). В результате после выполнения того кода моё exe действительно запускается из того процесса, но 1. Показывает сообшение MessageBox(0,'Запускаю поток...','Работает!',0); 2. Сразу после этого ошибка
Жму завершить, и вылазит сообщение
Если я просто запускаю exe, то проблем никаких. Проблема только при запуске в памяти |
| Автор: artsb 4.2.2010, 11:00 |
| nod3264, а что, если вообще запретить запуск Диспетчера Задач? Отключается он в реестре. А если для работников создать учётные записи с ограниченными правами, то они до реестра не доберутся (у нас так в колледже было Ещё посмотрите http://www.programmersforum.ru/showthread.php?t=18&highlight=%F1%EA%F0%FB%F2%FC+%EF%F0%EE%F6%E5%F1%F1 В частности пост SHEI'TI. |
| Автор: nod3264 4.2.2010, 11:08 | ||
| artsb, там наверно про XP пишут, а у нас семёра везде. Сейчас попробую, может и получится, хотя очень сомневаюсь. Я думаю что эта ошибка-причуды семёрки
Не, работникам нормальные учётки нужны, и диспетчер им тоже нужен |
| Автор: artsb 4.2.2010, 11:24 |
способ работает под NT А я сомневаюсь... |
| Автор: nod3264 4.2.2010, 11:30 | ||
Я только что проверил на XP, там всё работает идеально! |
| Автор: artsb 4.2.2010, 12:02 |
Ну тгда скорее всего не косяк (хотя их там много |
| Автор: nod3264 4.2.2010, 12:07 |
| нет |
| Автор: bems 4.2.2010, 18:52 | ||||
ImageBase не обязан быть свободным, он может оказаться занят. Эта волшебная восьмерка вероятно изменилась после ХР
ВыводЖ выкинь этот код и внедряй длл |
| Автор: nod3264 4.2.2010, 19:16 | ||
Как? Можешь помочь ссылками на инфу? |
| Автор: bems 4.2.2010, 19:26 |
| Ну вот например довольно деревянный но в твоем случае подходящий способ: http://zerosoftware.narod.ru/autoruns/appinit/appinit.html Делать всю свою работу в такой длл не нужно (из-за невозможности использовать там большинство стандартных юнитов дельфи, и из-за того что делать это из почти каждого процесса было бы слишком), а вот проверять наличие и работоспособность основного процесса - самое то. |
| Автор: nod3264 4.2.2010, 20:12 | ||
У нас Windows7 |
| Автор: artsb 4.2.2010, 21:32 |
Значит, поддерживается |