我正在对我们的登录脚本进行调整,它将一个可执行文件复制到本地硬盘驱动器,然后使用该schtasks
命令安排任务每天运行该可执行文件。
它是一个独立的可执行文件,运行时它会在工作目录中创建一个文件夹(在本例中与可执行文件位于同一目录)。当然,在 Windows XP 中,它可以放在任何地方 - 我可能只是把它放在 C:\SomeRandomFolder 中,然后就不管它了。但这个登录脚本也可以在 Windows 7 64 位机器上运行,而这些机器的 UAC 等问题比较棘手。
用户是本地管理员,但 UAC 已启用,因此我很确定可执行文件将被阻止复制到C:\
或之类的位置C:\Program Files
(因为这些位置似乎至少受到 UAC 的轻微保护)。计划任务需要在用户的配置文件下运行,因此我不能仅使用 SYSTEM 运行它并忽略 UAC 边界;我需要找到用户可以复制到的路径。
我可以将此独立可执行文件复制到哪里,以便复制操作能够在 Windows 7 上成功而无需 UAC 提示,该路径要么是 WinXP 和 Win7 所共有的,要么使用环境变量,并且以用户权限运行的计划任务能够启动该可执行文件?
答案1
您应该通过启动脚本部署应用程序。您仍然可以以已登录的用户身份运行任务,但使用启动脚本部署应用程序将避免您担心的与 UAC 相关的任何问题。
您的部署启动脚本可以在您部署程序的文件夹上设置权限,以便它可以使用用户的剥离令牌创建其子文件夹(将“用户/修改”添加到您放置文件的文件夹中,并删除 EXE 上的“用户/修改”,以便其他用户或恶意软件无法替换或修改 EXE)。
答案2
在我们公司,我写了一个脚本,它做了几件事,
A.) 它检查当前驱动器映射,如果不存在则映射驱动器号。
B.) 我检查本地用户桌面上是否存在文件,如果文件不存在,则从网络共享中复制。
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 [email protected]
pause
:exit
Echo.
Echo.`
答案3
那么“所有用户配置文件文件夹”怎么样?
这可能不是最优雅的方式,但如果您的可执行文件很小且不麻烦,它应该足够安全。当然,您可以通过环境变量获取路径。