【问题标题】:7-Zip execution permissions on Windows Server 2008 64-bitWindows Server 2008 64 位上的 7-Zip 执行权限
【发布时间】:2017-01-11 04:56:03
【问题描述】:

我创建了一个自解压 7-Zip 文件。其中包含一个 CMD 文件,7-Zip 在提取时运行该文件。此 cmd 读取注册表并执行一些进一步的活动(对这个特定问题不重要)。

在 Windows Server 2003 32 位中,此行为正常工作。但是,在 Windows Server 2008 机器上的测试表明,由 7-Zip 启动的 cmd 没有读取注册表的权限。更具体地说,它可以读取某些区域(Windows 当前版本),但不能读取其他区域(其他软件密钥)。

如果我获取该 cmd 文件并自己运行它(从 7-Zip 将其提取到的临时文件夹中运行它),一切运行正常。

使用 UAC“以管理员身份运行”会产生同样的问题,禁用 UAC 似乎没有帮助。

我不知道配置文件中有任何 7-Zip 选项告诉它提升权限或类似的东西。我在这里缺少什么吗?在 Windows Server 2008 或 64 位版本的操作系统中,注册表访问是否已被锁定?如何确保我的 EXE 文件可以将正确的权限传递给它启动的命令?

【问题讨论】:

标签: windows 7zip


【解决方案1】:

由于 7-Zip 文件是 32 位可执行文件,因此您的命令脚本在 32 位上下文中运行。后果之一是某些注册表位置被重定向。详情请见MSDN

您可以通过查找环境变量PROCESSOR_ARCHITEW6432 来检测 WOW64 环境,并且可以通过运行在c:\windows\sysnative 中找到的cmd.exe 的副本返回到本机 64 位环境。

命令文件顶部的这两行应该可以解决问题:

if defined PROCESSOR_ARCHITEW6432 c:\windows\sysnative\cmd.exe /c %~pf0 %*
if defined PROCESSOR_ARCHITEW6432 goto :eof

【讨论】:

  • 您先生是个巫师!我永远不会偶然发现这个答案,非常感谢!
  • 嘿Harry,我发现在win2k3 64位这个技巧不起作用。是的,我看到那里不存在 sysnative,我需要切换到 system32\cmd.exe,但是当我的脚本在那里重新运行时,它仍然检测到 PROCESSOR_ARCHITEW6432。当我自己运行 system32\cmd.exe 时,一切正常,但这里的交换似乎失败了。知道发生了什么吗?
  • 不,那不行,那仍然是 32 位版本。目前我能想到的唯一解决方案是编写一个 64 位应用程序来为您重新启动命令文件,并将其包含在包中。如果您将此作为新问题发布(“32 位 cmd.exe 如何在 Windows 2003 x64 中启动 64 位 cmd.exe?”),有人可能会想出更聪明的答案。
  • 发现...在我在这里找到它之前,我一直在寻找它。我并不清楚“sysnative”是我必须放在那里的实际字符串。我最初尝试用“system32”替换它,它使我的批处理文件陷入无限循环。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多