SDelete вызывается со страницы asp.net - PullRequest
0 голосов
/ 16 июля 2010

Я хочу использовать SDelete после запуска некоторого кода на странице asp.net.SDelete - это инструмент командной строки.Мой конкретный вопрос: кто-нибудь смог запустить этот SDelete со страницы asp.net?Более общий вопрос: как запустить утилиту командной строки со страницы asp.net?

спасибо

Ответы [ 2 ]

1 голос
/ 19 июня 2012

Ответ Аристоса сработает в тех случаях, когда пользовательские привилегии в порядке, а лицензионное соглашение SysInternals подтверждено. Я имею в виду, что утилита sdelete.exe из SysInternals будет запускаться под учетной записью Asp.Net, назначенной в IIS. Если эта учетная запись не имеет надлежащих разрешений и не приняла всплывающее лицензионное соглашение, файл не будет удален. Я столкнулся с этой самой проблемой прямо сейчас.

Вы можете указать домен / пользователя / пароль, используемый для запуска процесса. Это изложено здесь: http://social.msdn.microsoft.com/Forums/hu-HU/netfxbcl/thread/70b2419e-cb1a-4678-b2ae-cedcfe08d06f У автора этой темы были похожие проблемы, которые он решил, изменив владельца файла sdelete.exe.

В этом потоке также есть некоторая информация о входе в систему как пользователя, использованного для выполнения процесса и принятия лицензионного соглашения SysInternals: sdelete.exe не работает с cfexecute

Однако это невозможно, если вы планируете использовать встроенные системные учетные записи Asp.Net, поскольку эти учетные записи пользователей не разрешают типичный вход в систему. Я могу быть вынужден создать отдельного пользователя, с которым я могу войти и принять лицензионное соглашение, а затем указать эти учетные данные для запуска процесса. Однако в моем случае неудобно, но у меня может не быть возможности создавать пользователей на моем производственном сервере.

Существуют способы принудительного принятия EULA с помощью параметра командной строки или простой записи в реестре. Но я думаю, что это работает только для «обычных» пользователей, а не для пользователей встроенной системы.

1 голос
/ 16 июля 2010

Вы можете запустить утилиту командной строки, используя Класс процесса

Process myProcess = new Process();

myProcess.StartInfo.UseShellExecute = false;
// You can start any process, HelloWorld is a do-nothing example.
myProcess.StartInfo.FileName = "C:\\HelloWorld.exe";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();

Еще один пример ближе к asp.net, который я жду до конца и читаю вывод.

        Process compiler = new Process();

        compiler.StartInfo.FileName = "c:\\hello.exe";

        compiler.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8;

        compiler.StartInfo.UseShellExecute = false;
        compiler.StartInfo.CreateNoWindow = false;

        compiler.StartInfo.RedirectStandardError = true;
        compiler.StartInfo.RedirectStandardOutput = true;
        compiler.StartInfo.RedirectStandardInput = true;

        // here I run it
        compiler.Start();

        compiler.StandardInput.Flush();
        compiler.StandardInput.Close();

        // here I get the output
        string cReadOutput = compiler.StandardOutput.ReadToEnd();

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