gpt4 book ai didi

c# - 在 Windows 7 中使用备用数据流(分支)?

转载 作者:行者123 更新时间:2023-11-30 12:16:36 25 4
gpt4 key购买 nike

我从事的现有(基于网络)项目使用客户数据并使用客户名称作为文件名来保存报告。不幸的是,它从未过滤过此客户端名称,因此有人输入​​了包含冒号的客户端名称(例如“workshop:alex”)用于测试目的。这导致文件名 workshop:alex.pdf 恰好在 NTFS 系统上非常有效。 (因为它创建了一个名为“workshop”的文件,其中包含一个名为“alex.pdf”的备用数据流。由于应用程序还存储了文件名,因此再次读取它们没有问题,因为它只是引用相同的 ADS。因此, 没有人注意到这个问题...
但是,我最近开始处理这个项目,它必须迁移到带有 IIS 7 的 Windows 7 64 位。突然间,该站点不再使用这些 ADS 文件了!我很快就找到了原因并意识到为什么它在过去从未失败过。 (而且我还诅咒了以前从未检查过这个的开发人员!)但现在我想知道为什么它在 Windows 7 上失败了......所以,有人知道吗?


我有一个修复,顺便说一句!现在过滤了文件名,从而解决了问题。我只是好奇为什么。在较新的 Windows 版本上可能会导致这些问题的原因是什么?


关于应用程序:它是本地 IIS 安装与 WIN32 客户端应用程序的混合体。基本上,报告解决方案是作为 Web 应用程序开发的,并创建了以前使用 Word 进行报告的桌面应用程序。一些经理决定,如果桌面应用程序使用 Web 应用程序的逻辑来生成报告,这可能是个好主意。我承认:这不是个好主意……
结果是每个用户都将在其系统上运行 IIS,其中包含 Web 应用程序,同时他们还在同一台计算机上拥有桌面应用程序。为了使它们能够通信,使用 C# 创建了一个单独的 Web 服务,而 Web 应用程序是在经典 ASP 中构建的,而桌面应用程序是在 Delphi 中构建的。桌面应用程序将通过本地网络服务将数据发送到数据库,然后登录到本地网络应用程序以告诉它生成报告,然后下载...
在这个 Coding Hell 中哪里出了问题还不是很清楚。但由于文件名基于桌面应用程序的数据,有时包含冒号,因此有时会创建 ADS 而不是常规文件名。在 Windows 7 之前的 Windows 版本上,这似乎可以正常工作。文件已写入,IIS 还将它们作为 PDF 文件提供给桌面应用程序。 (从那里您可以使用普通文件名“另存为”。
此应用程序仅在 Windows 7(64 位)上中断,因为它可以将文件写入 ADS 流,当冒号添加到数据时,它无法再次检索它们。虽然我们现在从生成的文件名中过滤掉冒号,但我只想知道导致此问题的可能原因。所以这是一个出于好奇的问题......

最佳答案

很难说没有错误信息。您可能已经检查过了,但是:

  • 是否有可能将文件保存到 FAT 卷?
  • 也许杀毒软件启动并将 ADS 视为攻击?

不过,我现在对这个问题很好奇。如果您对此有答案,请分享 :)


编辑:您可能没有时间,但这就是我要做的:

  1. 尝试以管理员身份运行 IIS,看看问题是否仍然存在
  2. 如果是,那么这可能是 IIS7 问题,或 Win 7 上的 Scripting.FileSystem 问题
  3. 如果不是,那么您现在可以确定这与安全相关。将 IIS 还原为非管理员
  4. 将输出文件夹(您创建/读取 ADS 的位置)的完全控制权交给 IIS 用户
  5. 这应该正常工作。尽管如此,还是测试一下
  6. 逐个删除文件夹的权限,看看何时可以再次重现您的问题。

我的猜测可能是权限“READ ATTRIBUTES”或“READ EXTENDED ATTRIBUTES”

如果您仍然没有得到答案,为什么不启动 Sysinternal Process Monitor 来检查到底发生了什么。他们的工具“Streams”也可能有所帮助。

关于c# - 在 Windows 7 中使用备用数据流(分支)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4966889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com