【问题标题】:C# - Allowing network folder access without enabling user access via Windows ExplorerC# - 允许网络文件夹访问而不通过 Windows 资源管理器启用用户访问
【发布时间】:2014-07-15 06:04:18
【问题描述】:

我有一个应用程序需要对用户无权(也不应该)访问的网络文件夹进行读/写访问。我可以使用几种不同的方法访问该文件夹,包括 通过 System.Net 的 NetworkCredential 和 WNetAddConnection2 通过 DllImport("mpr.dll")

无论我使用什么方法,当应用程序访问文件夹时,用户都可以通过 Window->Explorer 浏览到该文件夹​​,即使用户没有(更重要的是,不应该)有凭据访问该网络文件夹。

有没有一种方法可以允许网络访问我的应用程序的文件夹,而不允许当前用户通过 Windows->Explorer 访问同一文件夹?

应用程序关闭后,用户将无法再访问网络文件夹(尽管这需要一分钟左右)。

谢谢,

【问题讨论】:

  • 没有。访问就是访问。您可能能够做到这一点的唯一方法是让您的应用程序通过不同的用户帐户访问该文件夹。
  • @RobertHarvey 我认为 OP 已经在做类似的事情,因为程序终止后访问被拒绝。
  • 如果用户运行应用程序,他可以用它做任何他喜欢的事情。因此,应用程序正在使用的凭据,用户可以从正在运行的应用程序中检索/拦截它们。应用程序是否需要直接访问共享。因为如果没有。也许更好的解决方案是让应用程序使用服务并让服务与用户共享。
  • 但是如果应用程序冒充另一个用户,为什么登录的用户可以通过 Windows 资源管理器访问该文件夹? OP 并没有说用户通过使用应用程序获得访问权限,而是在 Windows 级别。
  • 我同意@RolfHuisman。我已经使用特权用户的信用运行服务来完成这种事情。用户运行需要凭据的程序的问题是您必须嵌入凭据。

标签: c# networking


【解决方案1】:

如果您想让程序具有与当前登录用户不同的访问权限,则必须通过与当前登录用户不同的凭据运行它。

有几种方法可以实现这一点,但都不是特别容易。

您可以允许程序通过且仅通过“以管理员身份运行”选项运行,每次需要运行时都需要管理员启动程序。

您可以编写一个程序来通过Process.Start 启动您的程序,并通过ProcessStartInfo 参数设置用户。这仅在您的程序知道所需帐户的用户名和密码时才有效,并且可能存在安全风险,因为可以在没有适当混淆的情况下对其进行反编译和读取。

下一个选项是创建并安装一个 Windows 服务,该服务通过某种形式的 IPC(例如 WCF 服务)提供您的程序所需的读/写功能。这将允许您将服务设置为以管理员身份启动和操作,而程序本身可以使用用户凭据运行。

【讨论】:

  • 我可能不清楚,但我提供了不同的凭据。无论我如何通过应用程序传递这些凭据,用户都可以通过 Windows 资源管理器访问网络文件/文件夹,而不会被提示输入凭据。
  • 如果您通过方法传递凭据,您可能会遇到对当前用户权限的编辑,而不是真正在不同凭据下运行应用程序。
  • 似乎是这样。我将尝试通过您建议的 ProcessStart 传递用户凭据,看看是否至少不能提供临时修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2014-01-28
相关资源
最近更新 更多