Назад | Перейти на главную страницу

Безопасное место для размещения исполняемого файла в Windows 7 (и Windows XP)

Я работаю над настройкой нашего сценария входа в систему, который скопирует исполняемый файл на локальный жесткий диск, а затем, используя 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.`