以不同用户身份将文件写入文件

5

我想要向一个本地用户账户没有访问权限的文件写入内容,如何以管理员身份打开并写入文件?

3个回答

4

您需要启动一个具有管理员权限的另一个进程。要做到这一点,请使用“runas”作为第二个参数调用ShellExecute(这将打开用户账户控制对话框)。该可执行文件可以是单独的,也可以是调用ShellExecute的同一个可执行文件。


1

我之前成功使用过的一个好的包装类,用于在using块中实现模拟:

using (new Impersonation(domain, username, password))
{
   // <code that executes under different user context>
}
Using语句对于代码的可读性非常有帮助,就像这个例子中所示的那样,并确保当最后一个}字符被执行时(超出范围)使用的对象被正确处理。然而,显然没有垃圾回收的保证(请参见第一个答案)。
两个不同的来源提供这样的包装类:
  1. 这个stackoverflow解决方案具有良好的可读性和可用性。

  2. 这里是来自CodeProject的类似代码:一个用于模拟用户的小型C#类

请参阅MSDN以获取有关Using语句的更多信息。

真的很酷。我想它可以编译成.dll文件并被引用。 - RubberDuck
我没有尝试过这个特定的代码,但是类似的代码,据我所知,你可以将其包装在dll中(不过在较新版本的.NET中总是有新的限制)。 - Stein Åsmul
我所提到的.NET和Windows限制是指代码访问安全、Windows安全、数字证书以及类似的结构。据我所知,尽管存在这些安全措施,模拟身份应该可以正常工作,但未来不能保证。 - Stein Åsmul

1
你可能需要查看Microsoft的PSEXEC,它允许您以提升模式执行文件,并在需要时使用不同的用户身份。
您没有说明文件是如何进行写入的,但可以将PSEXEC与批处理/vbs文件一起使用以执行另一个批处理/vbs/exe。

“psexec”是一个很棒的工具,但在我看来更适合用于系统管理而不是从代码中运行。使用代码可以获得更好的异常处理、更少的笨重部署和更好的安全性。 - Stein Åsmul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接