Хорошо, я придумал, как сделать это без особых хлопот или обнажая пароль в незашифрованном виде .
Во-первых, вам нужно включить учетную запись администратора. Это самая неудобная часть. Я установил для своей обычной учетной записи автоматический вход, но досадно, что учетная запись администратора доступна на экране входа в систему, даже если я ее никогда не вижу. Некоторые из них могут жаловаться, что при воздействии на учетной записи администратора, это делает систему немного менее безопасным, но так как вы должны установить пароль для учетной записи для того, чтобы использовать его из командной строки, так или иначе, что беспокойство является спорным.
Метод, который я выбрал, требует использования какой-то программы SHELLEXECUTE, которая поддерживает минимизацию запущенных программ. (Вместо этого можно использовать команду START, встроенную в интерпретатор команд CMD, но это приведет к тому, что окно командной строки будет мигать, тогда как неконсервативная программа без окон этого не допустит.) Есть из чего выбирать, но я просто использовал тот, который написал когда-то.
Теперь просто создайте запись реестра в ключе RUN, который вызывает ShellExecute, указав параметр минимизации и используя RUNAS в качестве программы для выполнения. (Существуют другие программы, которые могут запускать программу с использованием другой учетной записи, если вы предпочитаете, но RUNAS поставляется с Windows и может сохранить пароль, чтобы избежать его включения в командную строку.) Кроме того, вы можете создать обычный ярлык Windows и переместить его в папку « Автозагрузка ».
Наконец, вам нужно передать программу (и любые аргументы для нее) в качестве аргумента в RUNAS.
(Не забудьте запустить целевую программу или любую другую программу с RUNAS, указав параметр /SAVECRED, по крайней мере, один раз без его минимизации , чтобы сохранить пароль.)
Используемая командная строка может быть довольно сложной, потому что это программа, вызывающая программу, вызывающую программу. Хуже, если вам нужно указать аргументы для целевой программы, и гораздо хуже, если вам нужно включить пробелы. Ситуация с кавычками может быстро стать сводящей с ума, поэтому, вероятно, потребуется много экспериментов.
Например, если вы используете ShelExec из PJ Naughter и хотите запустить SpeedFan, вы должны использовать командную строку, например:
shelexec /showcmd:sw_hide /EXE runas "/params:/user:administrator /savecred ""C:\Program Files\SpeedFan\speedfan.exe"""
Я должен отметить, что я установил параметры SpeedFan для запуска свернутыми, в противном случае вместо того, чтобы запускать speedfan «напрямую», мне пришлось бы запускать вторую программу ShellExecute с опцией минимизации для запуска SpeedFan (программы, вызывающей программу, вызывающую программу, вызывающую программа). Принятие этого на работу почти наверняка сведет с ума даже самого опытного компьютерного администратора.
Для разработки командной строки может потребоваться немного усилий, но, похоже, она работает достаточно хорошо для любых автоматически запускаемых фоновых задач, требующих административного доступа. Лучше всего то, что он работает для стандартных / ограниченных учетных записей пользователей, поэтому вы можете использовать этот метод для автоматического запуска программ с повышенными привилегиями, не давая приглашения UAC для обычных пользователей.
(Хотя он работает хорошо, у него есть свои недостатки, особенно в том, что, поскольку он запускает программы косвенно, менеджеры автозапуска, такие как Autoruns, StartupDelayer, HijackThis и т.д., Не смогут определить, какая из программ запускается автоматически - они будут все еще работает и сможет отключить / удалить / и т. д., но они не будут отображать правильный значок или информацию о ресурсах файла.)