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

时间:2012-01-31 11:03:32

标签: 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}",
                              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();

我有一个运行调用WGET命令的dos脚本的Windows服务,一切都很好,但我需要使用批处理脚本创建和删除临时文件夹。

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

  c:\windows\system32

而不是

  C:\\Program Files\\Netspot\\ControllerInterfaceService\\

这在测试工具中运行良好。

有关服务使用system32文件夹而不是映射到本地文件夹

的任何想法

3 个答案:

答案 0 :(得分:3)

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

link可能会有所帮助:

  

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

     

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

答案 1 :(得分:1)

除非您在Microsoft工作,否则请勿在windows \ system32中创建文件夹。

答案 2 :(得分:0)

您的批处理脚本是使用相对路径还是绝对路径?

如果是relative,请更改当前工作目录。这可以通过ProcessStartInfo设置。请参阅MSDN信息:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

  

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

另请考虑按照Blogbeard的建议写信%temp%

(请发布您的批处理脚本)