Служба Windows .NET выполняет пакетный файл из папки system32, а не из папки установки - PullRequest
3 голосов
/ 31 января 2012

Код услуги:

            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, которая запускает скрипт dos, который вызывает команду WGET, все хорошо, но мне нужно создать и удалить временную папку, используя пакетный скрипт.

У меня проблема в том, что служба отображает путь к

  c:\windows\system32

вместо

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

Это хорошо работает в тестовом жгуте.

Любые идеи о том, почему служба использует папку system32 вместо сопоставления с локальной папкой

Ответы [ 3 ]

3 голосов
/ 31 января 2012

По умолчанию текущим каталогом для службы Windows является System32.

Эта ссылка может быть полезна:

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

Используйте вышеприведенную строку кода, чтобы установить текущий каталог на то же каталог в качестве службы Windows.

1 голос
/ 31 января 2012

Если вы не работаете в Microsoft, не создавайте папки в windows \ system32.

0 голосов
/ 31 января 2012

Использует ли ваш пакетный скрипт относительный или абсолютный путь?

Если относительный, измените текущий рабочий каталог.Это может быть установлено через ProcessStartInfo.См. MSDN info: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

Свойство WorkingDirectory должно быть установлено, если указаны имя пользователя и пароль.Если свойство не задано, рабочим каталогом по умолчанию является% SYSTEMROOT% \ system32.

Также рассмотрите возможность записи в %temp% в соответствии с предложением Blogbeard.

(опубликуйте свой пакетный скрипт, пожалуйста)

...