我使用下一个代码:
...
ProcessStartInfo processStartInfo = new ProcessStartInfo();
...
Process process = new Process();
process.StartInfo = processStartInfo;
bool processStarted = process.Start();
...
.Net是否可以将调用的外部程序的权限限制为只读文件操作?
答案 0 :(得分:2)
我在BCL中知道的最佳选择是使用this Process.Start() overload.
在凭据有限的用户帐户下启动流程为了完全控制,您可以使用P / Invoke并调用CreateProcess,适当地设置安全属性(特别是安全属性中的安全描述符)以根据需要限制进程。
答案 1 :(得分:2)
简而言之。没有可靠的方法来启动任何给定的进程并确保它只能读取但不能写入文件。
当您创建进程时,它实际访问文件的能力实际上是由操作系统控制的。即与该过程相关的标志性令牌及其各自的访问级别。这是一个Win32安全概念。
现在,您可以使用完全独立的凭据简单地启动流程。通过对环境的足够控制,您可以确保这些特定凭据无法在磁盘上的任何位置写入,但这将非常非常极端,并且需要比我猜测您正在寻找的更多工作。
CLR安全模型对您没有帮助。当然,您可以玩弄并确保纯托管进程无法访问文件。但是,您无法保证Process.Start实际上是启动托管进程,或者托管进程因此不会将PInvoke转换为写入文件的本机代码。
答案 2 :(得分:1)
如果操作正确,您可以将DenyOnly SID添加到用于通过P / Invoke创建新流程的流程令牌。