我正在尝试使用Windows服务中的C#代码将xml文件从本地文件夹复制到共享路径。
它正在调用CMD文件并返回拒绝访问。但如果我尝试复制到本地,情况也一样。
private void CopyFile(string path)
{
try
{
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = false;
startInfo.FileName = Path.Combine(Environment.CurrentDirectory, "Batch", "Run.cmd");
startInfo.Arguments = "/c " + path;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
process = Process.Start(startInfo);
process.WaitForExit();
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd(); // ACCESS DENIED
int exitCode = process.ExitCode; // 1
process.Close();
}
catch (Exception ex)
{
string x = ex.Message;
}
}
Run.cmd
@set sourcePath=%1
copy /y %sourcePath%\MyTest.xml \\networksharedPath\XML\MyTest.xml
Windows服务的项目安装程序已配置为使用 LocalSystem 帐户。
如何使服务将文件从本地文件夹复制到共享计算机? C#代码或Windows Process Installer配置有任何问题吗?
注意:手动点击cmd文件会复制到共享文件夹。如果我修改为网络服务并运行我得到相同的错误Access is Denied
。尝试了https://stackoverflow.com/a/11983513/1559213中给出的配置步骤,但没有运气..
答案 0 :(得分:0)
默认情况下,LocalSystem帐户通常无权访问网络共享。尝试在您的帐户下运行该服务。通过手动运行cmd文件,它确实在您的帐户下运行,而不是在LocalSystem帐户下运行。它作为自己的进程运行时不会抛出任何异常。所以你可以在这里跟踪控制台输出。