我有一个使用登录localhost\administrator
运行的Windows服务。此服务旨在调用另一个可执行文件(MyProcess.exe
),它应该将一些内容写入日志文件。该服务使用Process.Start()
来创建流程,如下所示:
var p = new Process();
p.StartInfo.FileName = processFileName;
p.StartInfo.Arguments = arg;
p.Start();
问题是,MyProcess.exe
似乎被拒绝写入日志文件的权限,即使localhost\administrator
无疑拥有日志文件夹的权限。如果我从命令行运行MyProcess.exe
,它将完美运行。
那么,是否有可能使用不同的用户登录执行该过程?
您能否想到MyProcess.exe
被拒绝写入日志文件的权利的任何其他原因?
更新:日志文件正在写入本地计算机,但使用的是网络地址,即\\MyPC\LogFolder
。当我更改代码以引用C:\MyFolder
时,一切正常。显然网络地址有问题(即使它是本地的)。
我需要在文件夹上放置哪些共享设置,以便本地系统帐户可以访问该文件?
答案 0 :(得分:3)
如果您正在使用模拟,则可以模拟可以是当前用户或指定用户的用户。如果不是,它将在本地系统下运行,具有本地系统的特权。
答案 1 :(得分:1)
p.StartInfo.Domain = "UserName";
p.StartInfo.Password = "Passw0rd!";
您可以从以下网址获取用户名:
Thread.CurrentPrincipal.Identity.Name
答案 2 :(得分:1)
我已经解决了。
正如我的更新中所述,问题是该进程使用网络共享地址\\MyPC\LogFolder
解决了日志文件夹,并且在我们切换配置时将其写入c:\Logfolder
,它运作良好。
因此,当您查询本地文件夹时,localhost\Administrator
帐户被视为拥有足够的权限。但是,当您通过网络共享时,您需要提供有效的网络凭据,而localhost\Administrator
只是不会删除它。如果您更改为使用MYDOMAIN\MyUser
,它甚至可以使用网络共享地址。