C# .NET Windows服务从system32文件夹执行批处理文件而不是安装文件夹

C# .NET Windows服务从system32文件夹执行批处理文件而不是安装文件夹,c#,.net,service,directory,aruba,C#,.net,Service,Directory,Aruba,该服务的代码如下所示 System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process var arguments = String.Format("--ip {0} --user {1} --passwd {2} --guest {3} --gpasswd {4} --action {5}",

该服务的代码如下所示

            System.Diagnostics.Process proc = new System.Diagnostics.Process(); // Declare New Process

            var arguments =
                String.Format("--ip {0}  --user {1} --passwd {2} --guest {3} --gpasswd {4} --action {5}",
                              controllerIPAddress, controllerUsername, controllerPassword, username, password, action);

            proc.StartInfo.Arguments = arguments;

            proc.StartInfo.FileName = "C:\\Program Files\\Netspot\\ControllerInterfaceService\\batchfile.bat";

            proc.StartInfo.RedirectStandardError = true;
            proc.StartInfo.RedirectStandardOutput = true;
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.CreateNoWindow = true;
            proc.Start();
            proc.WaitForExit();
我有一个windows服务,它运行一个调用WGET命令的dos脚本,一切正常,但我需要使用批处理脚本创建和删除一个临时文件夹

我遇到的问题是服务正在将路径映射到

  c:\windows\system32
而不是

  C:\\Program Files\\Netspot\\ControllerInterfaceService\\
这在测试线束中工作正常


如果您不在Microsoft工作,请不要在windows\system32中创建文件夹。您的批处理脚本使用的是相对路径还是绝对路径

如果是相对的,请更改当前工作目录。这可以通过
ProcessStartInfo
进行设置。请参阅MSDN信息:

如果用户名为,则必须设置WorkingDirectory属性 并提供密码。如果未设置该属性,则默认值为 工作目录为%SYSTEMROOT%\system32

也应考虑由Bug胡须建议编写的<>代码> %TEMP%%/COD>。p>


(请发布批处理脚本)

默认情况下,windows服务的当前目录是System32

这可能会有所帮助:

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory)

使用上面的代码行将当前目录设置为相同的 目录作为您的windows服务


临时文件夹是否必须位于
system32
内?使用
%temp%\aruba out
可能会起作用。temp文件不需要在system32中,但由于某种原因,当作为服务运行时,它默认为该文件夹,而不是安装文件夹添加了解决问题的proc.workingdirectory