Веб-служба C #, запускающая командный файл или команду dos? - PullRequest
0 голосов
/ 14 августа 2011

Из моего предыдущего вопроса Выполнение пакетного файла в веб-сервисе C #

Я проверил разрешение всех связанных вещей и обнаружил, что:

пакетный файл: разрешение = полный контроль для всех пользователей

IIS user = myUser

.. win32 \ cmd.exe: разрешение для системы, администратора, myUser = чтение и выполнение, разрешение на чтение для "TrustedInstaller" (что это?) = Полный контроль

Visual Studio работает в режиме администратора.

Я провел некоторые исследования в Интернете, и мне кажется, что мне нужно что-то сделать с «Локальными политиками» на моей машине. К сожалению, я использую Windows Vista Home Premium, которая, кажется, не может установить локальные политики ... Я также пытаюсь изменить разрешение cmd.exe на «Полный доступ», но это просто не позволяет мне сделать это.

Кажется, что я сталкиваюсь с "неразрешимой" проблемой, поэтому я объясню, что я делаю, чтобы кто-то мог дать мне представление о том, что делать.

  • Я разработал приложение Blackberry, используя симулятор Blackberry. Он находится на том же компьютере, что и мой веб-сервис.

  • Я разработал веб-сервис на C #, опубликованный на моем локальном хосте.

  • Приложение Blackberry загружает файл в веб-сервис. Веб-сервис хранит файл на моем ПК. (У меня нет проблем с этой частью.)

  • На моем ПК есть одна программа, я назову ее myprogram.exe. Программа работает только на DOS. Программа преобразует файл из одного типа файла в другой, используя команду myprogram.exe path \ oldfile.x path \ newfile.y newfile.y будет автоматически создан и сохранен на моем ПК.

  • Мне нужно преобразовать файл, который был отправлен с BB и теперь хранится на моем локальном ПК, поэтому я написал 1 пакетный файл, содержащий команду dos. Веб-сервис должен выполнить командный файл, но это не так.

Если я перестану пытаться работать с командным файлом, могу ли я выполнить эту команду? (или любым способом, которым я могу запустить эту внешнюю программу) Пожалуйста, дайте мне идею. Я искал в Интернете и до сих пор не понимаю. Я не знаю, что делать сейчас. Т_Т

PS. Прости меня, если мои вопросы глупы. Я просто хочу попробовать все возможные способы сделать эту часть успеха проекта.

1 Ответ

1 голос
/ 15 августа 2011

Все, что я могу думать, это:

  1. Ваш веб-сайт ASP.NET работает под DefaultAppPool. DefaultAppPool имеет только ограниченные права.

    Чтобы выполнить командный файл из вашего сервиса создать новый пул приложений.

    a) Открыть диспетчер информационных служб Интернета (IIS 7). Вы найдете Информационные службы Интернета Диспетчер в меню «Пуск» Windows Vista.

    б) В дереве слева щелкните правой кнопкой мыши Пулы приложений. и добавьте новый пул приложений.

    в) Выберите созданный пул приложений и нажмите Расширенные настройки.

    d) В качестве идентификатора выберите LocalSystem.

    e) В дереве выберите свой веб-сайт (например, веб-сайт по умолчанию). Выберите основные параметры и выберите созданный пул приложений.

    f) Перезапустите ваш веб-сайт (щелкните правой кнопкой мыши по вашему веб-сайту, под Управляйте своим сайтом выберите перезапустить).

    Вы должны быть в состоянии выполнить ваш командный файл. Вот пример:

    Process oProcess = new Process ();

    oProcess.StartInfo.UseShellExecute = false;

    oProcess.StartInfo.WorkingDirectory = @ "c: \ temp \ test";

    oProcess.StartInfo.FileName = @ "c: \ windows \ system32 \ cmd.exe";

    oProcess.StartInfo.CreateNoWindow = true;

    oProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

    oProcess.StartInfo.Arguments = @ "/ C c: \ temp \ test \ mybatch.bat";

    * +1036 * oProcess.Start ();

    Однако я не рекомендую этот подход.

  2. Переосмыслите свой дизайн. Я бы порекомендовал использовать WCF-сервис, размещенный в Служба Windows для выполнения вашего командного файла. Затем из вашего веб-сервиса позвоните в WCF-Service, чтобы выполнить пакетный файл, например, (псевдокод):

    var wcfClient = new ConverterServiceClient ();

    wcfClient.Convert (@ "c: \ temp \ oldfile.x", "c: \ temp \ newfile.y");

    // Здесь ваш сервис преобразовал файл с помощью вашего приложения.

    Если вы привязаны к .NET Framework 2.0, вы можете разместить Служба удаленного взаимодействия .NET в приложении-службе Windows.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...