Я новичок здесь, пожалуйста, дайте мне знать, если я сделал ошибку в своем сообщении.
Я пытаюсь запустить exe-файл с графическим интерфейсом без необходимости входа в Windows 7.
Я пытался:
Планировщик заданий Windows,
NSSM,
Команда SC,
Пакетный файл в папке автозагрузки,
исполняемый файл в папке автозагрузки,
Кроме того, команда SC была опробована с множеством различных аргументов и опций. Я пробовал NSSM, Windows Task Scheduler и команду SC с возможностью использования определенной учетной записи (не уверен в деталях), предоставляя локальное имя пользователя и пароль.
Все они были опробованы как для пакетных файлов, так и для исполняемых файлов. Единственной целью командного файла было запустить исполняемый файл. Я подумал, что, возможно, этот косвенный подход поможет до некоторой степени, но нет никакой разницы в попытке запустить программу до входа в систему.
Ключом является GUI, потому что, например, я смог запустить командный файл, который создал пустой текстовый файл, прежде чем войти в систему (проверено временем), используя планировщик задач Windows, NSSM и команду SC.
Однако, если я попытаюсь запустить, скажем, notepad.exe (запустите notepad.exe), он не будет работать. Блокнот не будет отображаться как задача, не будет иметь окна и не будет отображаться как процесс. Я попытался поместить команду создания txt-файла после команды запуска в пакетном файле, и файл создается (поэтому пакетный файл не зависает при запуске), но в блокноте нет никаких следов.
Некоторые из моих коллег также предположили, что это результат графического интерфейса и того, как он должен проводить сеанс на рабочем столе.
Что РАБОТАЕТ:
1. Разрешение входа в систему при загрузке без пароля.
2. Выполнение командного файла, который запустит программу, а затем
заблокировать компьютер.
3. Рабочий стол будет мигать только около 1 секунды.
Проблема: этого недостаточно, поскольку это уязвимость, даже если она длится всего доли секунды.
Нашел кого-то, у кого была проблема, похожая на меня, и включил ее в качестве решения, но он признает, что это не безопасный подход.
https://serverfault.com/questions/583517/start-program-on-computer-startup-when-nobody-is-logged-on-and-show-the-window-w
Есть еще один путь, который я не совсем понимаю, и который, я думаю, может сработать. Это касается функций LogonUser (), ImpersonateLoggedOnUser (), CreateProcessAsUser (), CreateProcessWithLogonW () .
Я хотел бы запустить его в качестве службы, которая сможет "войти в систему" и запустить программу.
Код для создания сеанса:
bool startProcess(string path) {
_STARTUPINFOA info;
info.cb = sizeof(info);
info.lpReserved = NULL;
//The name of the desktop to which we want to connect.
info.lpDesktop = NULL;
//The title assigned to the GUI window.
info.lpTitle = NULL;
//Offset of the window from top left corner
info.dwX = 0;
info.dwY = 0;
//Size of the GUI window that is created.
info.dwXSize = 1000;
info.dwYSize = 900;
//Specifies the nunmber of columns of a console (if applicable) of characters.
info.dwXCountChars = 30;
//Specifris the number of rows of characters of a console window
info.dwYCountChars = 0;
//Specifies the color when opening the new GUI
info.dwFillAttribute = 0;
//Specifies different visual attributes, such as for the cursor.
info.dwFlags = 0;
//This must be zero.
info.cbReserved2 = 0;
//This must be NULL.
info.lpReserved2 = NULL;
info.dwFlags = 0;
//This is NULL because of the value of dwFlags.
info.hStdInput = NULL;
//This is ignored because of dwFlahs.
info.wShowWindow = 0;
//This is NULL because of the dwFlags.
info.hStdOutput = NULL;
//This is NULL because of the value of dwFlags.
info.hStdError = NULL;
PROCESS_INFORMATION ThreadInfo;
bool success = CreateProcessAsUserA(theHandle, path.c_str(), NULL, NULL, NULL, false, CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &info, &ThreadInfo);
//lpStartupInfo might be useful in the situation that a display window is not being shown.
threadHandle = ThreadInfo.hThread;
if (!success) {
return false;
}
else {
return true;
}
}
Что-то, что я не считаю столь значительным, и в большинстве случаев не встречается, но появляется, когда я хакуюсь вокруг:
обнаружена ошибка: ошибка 1053: служба не ответила на своевременный запуск запроса на управление
Попробовал: очистка реестра
Загрузка фреймворка NET 4.5.