【问题标题】:Icacls, problems with permission in subfolder of Program Files (x86)Icacls,Program Files (x86) 子文件夹中的权限问题
【发布时间】:2017-08-20 19:27:13
【问题描述】:

我的问题非常持久。 我有一个自解压的 rar 文件,比如 files.rar。 这是在 C:\Program Files (x86)\CompanyName\XDS\bin

中解压缩的

现在这会启动一个批处理文件 install.bat,它位于 bin 文件夹中。 32 位版本的 cmd.exe 执行此批处理文件。 到目前为止一切顺利,这一切都很好。

但是:我必须重命名 bin 文件夹中的一个文件并删除另一个。您可能想知道,为什么要在其中放置需要删除的文件?好吧,我有一个 32 位和 64 位版本的驱动程序。根据目标,其中一个必须重命名为 NatUSB.dll,而另一个必须删除。

如果我运行这个批处理文件(简化):

icacls natusb*.dll /inheritance:r /grant:r everyone:(OI)(CI)F
icacls natusb*.dll /T

rename NatUSB_32_ezusb.dll NatUSB32.dll
del    NatUSB_32_winusb.dll

我有以下问题:

  • 我需要管理员权限,但这是不可接受的 我公司的宗旨
  • 即便如此,我仍然收到“访问被拒绝” 重命名,可能是因为已经存在 NatUSB32.dll。 但是,即使作为管理员,我也无法删除此文件:“访问权限是 拒绝”
  • del NatUSB_32_winusb.dll 还给出“访问被拒绝”

然后我尝试将这两个文件复制到bin2。原因:如果我执行“icacls bin /T”,我获得权限信息的文件列表太长,所以我希望只为几个文件获取此信息。不幸的是,我得到“访问被拒绝”(在尝试复制到 bin2 时),即使管理员和系统的文件权限是“完全控制”。 顺便说一句,只是 icacls natusb*.dll /T 没有授予任何权限,这似乎只适用于整个文件夹。

当我在 XSD(父)文件夹中并执行“icacls bin2 /inheritance:r /grant:r everyone:(OI)(CI)F”时 接下来,我做“icacls bin2 /T”

bin2 所有人:(OI)(CI)(F) 内置\用户:(OI)(CI)(F)

我仍然无法将几个 nat*.dll 从 bin 复制到 bin2。

如果我尝试在 bin 文件夹上设置访问权限(与上面非常相似),我会得到“bin:句柄无效”。

顺便说一句,bin的权限如下:

bin NT SERVICE\TrustedInstaller:(I)(F)
    NT SERVICE\TrustedInstaller:(I)(CI)(IO)(F)
    NT AUTHORITY\SYSTEM:(I)(F)
    NT AUTHORITY\SYSTEM:(I)(OI)(CI)(IO)(F)
    BUILTIN\Administrators:(I)(F)
    BUILTIN\Administrators:(I)(OI)(CI)(IO)(F)
    BUILTIN\Users:(I)(RX)
    BUILTIN\Users:(I)(OI)(CI)(IO)(GR,GE)
    CREATOR OWNER:(I)(OI)(CI)(IO)(F)

如前所述,使用 icacls 我无法更改任何内容。顺便说一句,安全选项卡不会显示重复的组或名称。

简而言之:我在重命名、删除文件(必须紧急,以解决当前问题)以及将文件从 C:\Program Files (x86)\XXX\XDS\bin 复制到 XDS\bin2 时遇到问题。

为了解决这些问题,我需要在脚本中使用 icacls 或其他内置命令来强制访问权限。在文件夹的安全选项卡中设置访问权限是不可接受的:它需要通过脚本完成。另外:我们不能安装第 3 方软件,如果它很大或有商业许可证,当然不能。几 kB,也许 1MB 是免费使用的工具,如果一切都失败了,可能是可以接受的。

该解决方案也应该不需要管理员权限。

【问题讨论】:

    标签: windows file-permissions


    【解决方案1】:

    这是你的主要问题:

    icacls natusb*.dll /inheritance:r /grant:r everyone:(OI)(CI)F
    

    (OI)(CI) 标志仅对目录有效,对文件无效。因为标志无效,权限被忽略。所以这个命令的最终效果是从文件中删除所有权限,隐式拒绝包括管理员在内的所有人的访问权限。

    如果取出无效标志,命令将按预期工作:

    icacls natusb*.dll /inheritance:r /grant:r everyone:F
    

    但是,鉴于您对问题的描述,您似乎需要管理员访问权限,因为现有文件夹的权限对于非管理员来说是只读的。没有办法解决这个问题,除非您可以安装到不同的文件夹(例如,在用户的 Application Data 文件夹中)或提前更改目标文件夹权限。

    请注意,更改文件夹权限可能会引入安全漏洞。

    【讨论】:

    • 嗨;非常感谢您的回复。我会试试你的解决方案。
    • 如何提前更改权限?我可以将文件权限保存在 rar 文件中并禁用继承吗?这样我们 PFx86 下的子目录将允许所有人或所有者完全访问吗?无论如何,这就是我将尝试找出的。您不需要完成我所有的工作,但我们非常感谢您提供所有帮助。
    • 从 xds\bin 复制到 xds\bin2、删除 xds\bin 中的文件等许多问题在执行 icacls 后得到解决。 /reset /T 在 bin 文件夹中
    • 您可能需要管理员权限才能将 rar 文件解压到 Program Files 文件夹中。按照设计,非管理员无权写入程序文件。
    • 没错,我们需要管理员权限才能解压。问题已经得到满意的解决:我们制作了两个不同的 rar 文件,一个 32 位和一个 64 位,其中正确版本的驱动程序重命名为 NatUSB.dll。感谢所有帮助
    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 2010-11-05
    • 2012-08-17
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多