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

4
服务的代码如下:
            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();

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

我的问题是服务将路径映射到了

  c:\windows\system32

替代

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

在测试环境中这个工作得很好。

有什么想法,为什么服务使用system32文件夹而不是映射到本地文件夹?


临时文件夹必须在system32内吗?使用%temp%\aruba-out可能会起作用。 - Blorgbeard
临时文件不需要在system32中,但是由于某种原因,在作为服务运行时,默认情况下会将其设置为该文件夹,而不是安装文件夹。 - Welsh King
添加了proc.workingdirectory,解决了问题。 - Welsh King
3个回答

3

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

这个链接可能会有帮助:

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

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


0

除非你在为微软工作,否则不要在windows\system32中创建文件夹。


0

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

如果使用相对路径,需要更改当前工作目录。可以通过ProcessStartInfo进行设置。请参阅MSDN信息:http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

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

还应考虑按照Blogbeard的建议写入%temp%

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接