我们将在我们几乎所有的计算机上安装一些新软件,我正在尝试设置 GPO 来执行此操作。我们运行的是 Windows Server 2008 R2 域控制器,我们所有的机器都是 Windows 7。
GPO 调用位于我们文件服务器网络共享上的以下脚本。它自己调用的脚本位于另一台服务器上的另一个网络共享上的可执行文件。可执行文件将立即因错误而崩溃0x0000006
。事件日志只是这样说:Windows cannot access the file for one of the following reasons: there is a problem with the network connection, the disk that the file is stored on, or the storage drivers installed on this computer; or the disk is missing. Windows closed the program Setup.exe because of this error.
这是脚本(存储在\\WIN2K8R2-F-01\Remote Applications
):
@ECHO OFF
IF DEFINED ProgramFiles(x86) (
ECHO DEBUG: 64-bit platform
SET _path="C:\Program Files (x86)\Canam"
) ELSE (
ECHO DEBUG: 32-bit platform
SET _path="C:\Program Files\Canam"
)
IF NOT EXIST %_path% (
ECHO DEBUG: Folder does not exist
PUSHD \\WIN2K8R2-PSA-01\PSA Data\Client
START "" "Setup.exe" "/q"
POPD
) ELSE (
ECHO DEBUG: Folder exists
)
以管理员身份手动运行脚本也会导致相同的错误。设置具有相同目标和参数的快捷方式非常有效。手动调用可执行文件也可以。
不确定这是否重要,但安装程序基于 dotNETInstaller。我不知道什么版本。
对于解决此问题的任何建议,我将不胜感激。提前致谢!
更新
我非常怀疑这是否重要,但是托管脚本的网络共享是共享驱动器,而可执行文件的脚本引用网络共享是共享文件夹。
此外,这两个共享都Domain Computers
列出了对共享和安全选项卡的完全访问权限。并且PUSHD
无需将路径用引号引起来即可工作。
更新 2
如果我在客户端计算机上手动打开 CMD 并输入,PUSHD "\\WIN2K8R2-PSA-01\PSA Data\Client"
我会将目录正确安装为驱动器。如果我随后输入START "" "Setup.exe" "/q"
安装程序,它会按原样启动,它实际上会安装应用程序。
更新 3
在通过ECHO
语句进行一些调试时,我开始TXT
将文件输出到C:\
客户机上的驱动器。在我打电话之后,PUSHD
我ECHO
ed%CD%
查看当前目录是什么。如果它成功安装了远程目录,它最终会输出C:\Windows
不{?}:\Client
应该的输出。
我认为这与我在屏幕顶部收到的不支持 UNC 路径的消息有关,等等等等,即使脚本的其余部分实际执行了。
仍在寻找有关使其正常工作的建议。
听起来像是权限问题。如果您在启动脚本中执行此操作,它将作为
SYSTEM
. 您需要授予Domain Computers
对文件存储位置的读取权限。在共享路径周围加上引号。您在共享名称中有一个空格,我假设这就是导致问题的原因。
可能对您有帮助的建议。
1)
您可以使用 sysinternal 的 psexec 以 SYSTEM 身份打开一个 cmd 窗口以调试“psexec \127.0.0.1 /s cmd” 从那里您可以“逐行”浏览脚本以查看它在哪里失败
2)
您可以修改脚本,使其在带有“%~dp0”前缀的当前目录中运行
您是否尝试过跳过 START 命令?
问题是您在安装完成之前弹出。这是因为 cmd 启动设置并立即继续执行 popd 命令。
您也可以使用 UNC 路径。也许你需要报价。