2009-07-28 14 views
3

В приложении Windows Windows для изменения файла конфигурации удаленной машины, который используется приложением ASP.NET. Тем не менее, я получаю сообщение об ошибке:Могу ли я остановить IIS?

System.IO.IOException: The process cannot access the file '[file name]' because it is being used by another process.

Теперь, это не может быть проблемой, но я вычисляя, что если я могу остановить IIS, то я могу изменить файл конфигурация машины (без получения исключение), а затем я могу перезапустить IIS с помощью этого кода:

Process proc = new Process(); 
      proc.EnableRaisingEvents = false; 
      proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
      proc.StartInfo.FileName = "iisreset"; 
      proc.StartInfo.Arguments = serverName; 
      try 
      { 
       proc.Start(); 
       proc.WaitForExit(); 
       ... 

1) есть ли способ, чтобы остановить IIS без перезапуска, и 2) Doe этого подхода к изменению server.config файл даже имеет смысл?

(заметьте, я изменение файла с помощью регулярных выражений поиска и замены, это проблема?)

+2

1) тип 'IISRESET /?' В командной строке –

+0

Извините, я забыл указать, что это конфигурация удаленной машины. – thewillcole

ответ

7

Вы должны быть в состоянии сделать что-то подобное. У меня нет окон, поэтому я не могу проверить точное имя службы, но я думаю, что это «IISADMIN» или «w3svc». Помните, что это должно быть имя службы, а не отображаемое имя, которое вы видите на панели управления услугами.

ServiceController controller = new ServiceController(); 
controller.MachineName = "."; // or the remote machine name 
controller.ServiceName = "IISADMIN"; // or "w3svc" 
string status = controller.Status.ToString(); 

// Stop the service 
controller.Stop(); 

// Start the service 
controller.Start(); 

Вы можете также использовать

net stop w3svc

или

net stop IISADMIN

из командной строки или в процессе в коде

+2

Я думаю, что «w3svc» лучше в этом случае, так как это остановит только веб-сервер. Остановка IISADMIN также остановит другие службы, такие как ftp и smtp. – fretje

+0

да, я думаю, вы правы, извините, у меня нет окон, чтобы проверить это –

+0

, но файл конфигурации все равно может быть заблокирован службой администратора, вам просто нужно будет проверить –

2

Вы можете использовать команду IISRESET /STOP.

Если вы наберете IISRESET /? вы получите список других доступных опций.

[Edit:. Передайте "/ STOP" переключатель в качестве свойства аргументов в процессе startinfo объекта]

4

Странно. Файл .config не должен блокироваться исключительно.
Но чтобы ответить на ваш вопрос, вы можете также использовать чистую команду для этого:

net stop w3svc 

, чтобы остановить службу WWW и

net start w3svc 

, чтобы запустить его снова.

Вы также можете сделать это программно, как описано @monkeyp

Примечание, что я бы посоветовал против этого и сначала попытаться определить (и решительность) причину блокировки, как описано @RichardOD.

0

Вы можете часто просто перерабатывать или останавливать/запускать Application Pool IIS работает, а не перезапускает IIS вообще.

2

Должно быть «iisreset/STOP», чтобы остановить службы, затем «iisreset/START», чтобы перезапустить их.

2

Используйте инструмент, как wholockme or unlocker, чтобы найти причину запирания.

Обновление - еще один вариант - использовать Process Explorer (спасибо fretje) - это хороший вариант, так как у многих разработчиков есть эта утилита на своем ПК.

+2

или обработчик процесса – fretje

+0

Спасибо, я обновлю свой ответ. – RichardOD

0
Using System.Diagnostics; 

//to stop ISS 
ProcessStartInfo startInfo = new ProcessStartInfo("iisreset.exe", " /stop"); 
System.Diagnostics.Process.Start(startInfo); 

//to start ISS 
ProcessStartInfo stopInfo = new ProcessStartInfo("iisreset.exe", " /start"); 
System.Diagnostics.Process.Start(stopInfo); 
Смежные вопросы