Я работаю над настройкой нашего сценария входа в систему, который скопирует исполняемый файл на локальный жесткий диск, а затем, используя schtasks
, запланируйте задачу на ежедневный запуск этого исполняемого файла.
Это автономный исполняемый файл, и при запуске он создает папку в рабочем каталоге (который в данном случае будет тем же каталогом, что и исполняемый файл). В Windows XP, конечно, его можно положить куда угодно - я бы, наверное, просто закинул его в C: \ SomeRandomFolder и оставил. Но этот сценарий входа в систему также работает на 64-битных машинах с Windows 7, а с UAC и всем остальным сложнее.
Пользователь является локальным администратором, но UAC включен, поэтому я уверен, что исполняемый файл будет заблокирован от копирования в такое место, как C:\
или C:\Program Files
(поскольку они, по крайней мере, слегка защищены UAC). Запланированная задача должна запускаться под профилем пользователя, поэтому я не могу просто запустить ее с помощью SYSTEM и игнорировать границы UAC; Мне нужно найти путь, по которому пользователь может скопировать.
Где я могу скопировать этот автономный исполняемый файл, чтобы операция копирования завершилась успешно без запроса UAC в Windows 7, путь либо общий для WinXP, так и для Win7, либо использует переменные среды, а запланированная задача, выполняемая с разрешениями пользователя, может запускаться исполняемый файл?
Вы должны развертывать приложение с помощью сценария запуска. Вы по-прежнему можете запустить задачу от имени пользователя, который вошел в систему, но развертывание приложения с помощью сценария запуска предотвратит любые проблемы, связанные с UAC, которые вас беспокоят.
Сценарий запуска развертывания может установить разрешения для папки, в которую вы развертываете программу, таким образом, чтобы он мог создавать свою подпапку с вырезанным токеном пользователя (добавьте «Пользователи / Изменить» в папку, в которую вы помещаете файл, и удалите "Users / Modify" из EXE, чтобы другие пользователи или вредоносное программное обеспечение не могли заменить или изменить EXE).
А как насчет папки профиля всех пользователей?
Возможно, это не самый красивый способ, но если ваш исполняемый файл небольшой и не доставляет хлопот, он должен быть достаточно безопасным. Конечно, вы можете получить путь с помощью env var.
В нашей компании я написал этот сценарий, который выполняет несколько функций:
A.) Он проверяет текущую карту дисков и, если ее не существует, отображает букву диска.
Б.) Я проверяю наличие файлов на рабочем столе локального пользователя, если файла нет, он копирует его из общего сетевого ресурса.
C.) Он проверяет, какая версия Windows работает, и соответственно запускает другой сценарий.
Надеюсь, это вам поможет.
+++++++++++++++++++++++++
@echo off
echo Created by: Jeff Borg - 01/25/2011
echo.
echo.
IF NOT EXIST P: GOTO :NetMap
net use P: /delete
:NetMap
net use P: \\SERVER2\bvdata
ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp
if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit
systeminfo | find "OS Name" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i
echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7
echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_vista
:ver_xp
echo Current Version Windows XP
Echo.
Echo.
C:
IF NOT EXIST "C:\Documents and Settings\%username%\Desktop\BusinessVisionCSE.rdp" GOTO xpNotFound
Echo Found "BusinessVisionCSE.rdp" on %username%'s desktop
goto exit
:ver_vista
echo Current Version Windows Vista
Echo.
Echo.
C:
IF NOT EXIST C:\Users\%username%\Desktop\BusinessVisionCSE.rdp GOTO vistaNotFound
Echo Found "BusinessVisionCSE.rdp" on %username%'s desktop
goto exit
:ver_7
echo Current Version Windows 7
Echo.
Echo.
C:
IF NOT EXIST C:\Users\%username%\Desktop\BusinessVisionCSE.rdp GOTO 7NotFound
Echo Found "BusinessVisionCSE.rdp" on %username%'s desktop
goto exit
:xpNotFound
Echo Could not find file "BusinessVisionCSE.rdp" on %username%'s desktop.
Echo.
Echo.
Echo Copying from \\SERVER1\gpofiles\BusinessVisionCSE.rdp
Echo.
Echo.
xcopy \\SERVER1\gpofiles\BusinessVisionCSE.rdp "C:\Documents and settings\%username%\Desktop\"
Echo.
Echo.
Echo Found "BusinessVisionCSE.rdp" on %username%'s desktop
GOTO exit
:vistaNotFound
Echo Could not find file "BusinessVisionCSE.rdp" on %username%'s desktop.
Echo.
Echo.
Echo Copying from \\SERVER1\gpofiles\BusinessVisionCSE.rdp
Echo.
Echo.
xcopy \\SERVER1\gpofiles\BusinessVisionCSE.rdp C:\Users\%username%\Desktop\
Echo.
Echo.
Echo Found "BusinessVisionCSE.rdp" on %username%'s desktop
GOTO exit
:7NotFound
Echo Could not find file "BusinessVisionCSE.rdp" on %username%'s desktop.
Echo.
Echo.
Echo Copying from \\SERVER1\gpofiles\BusinessVisionCSE.rdp
Echo.
Echo.
xcopy \\SERVER1\gpofiles\BusinessVisionCSE.rdp C:\Users\%username%\Desktop\
Echo.
Echo.
Echo Found "BusinessVisionCSE.rdp" on %username%'s desktop
GOTO exit
:warnthenexit
echo Unable to determine current OS version - Contact helpdesk@getconnected.ca
pause
:exit
Echo.
Echo.`