Ужасы работы с исполняемыми файлами в Windows

#php #apache #exec #executable

#php #apache #exec #исполняемый файл

Вопрос:

Я запускаю исполняемый файл под названием Test.exe через exec который, в свою очередь, запускает Outlook.

Я могу запустить Test.exe отлично, но я получаю сообщение об ошибке:

Rejected Safe Mode action : Microsoft Office Outlook. в окне просмотра событий Windows.

Если я запущу Test.exe сам через DOS работает нормально и без ошибок. Так что это как-то связано с тем, как PHP запускает этот исполняемый файл. Я включил apache для запуска от имени учетной записи администратора, но происходит то же самое.

Что еще я должен делать, чтобы Apache мог запускать исполняемый файл без каких-либо проблем?

Комментарии:

1. так это работает из командной строки, но не из exec ?

2. @Khez правильно. Очень странно.

3. просто случайно, но вы пробовали shell_exec или system? Просто любопытно…

4. @Khez — хорошая идея, но я только что попробовал это, и, к сожалению, это не сработало. Однако я просто запустил его по какой-то счастливой случайности, создав новую учетную запись администратора. Хотя это работает, мне не нравятся вещи, которые «внезапно» просто работают, не будучи решенными. Тем не менее, спасибо вам за вашу помощь.

Ответ №1:

Он работает из командной строки, но не из процесса Apache. Неудивительно, потому что Apache, вероятно, запускается как сервис с системной учетной записью (не настольная интерактивная).

Если вы перенастроите службу для запуска от имени пользователя с правом локального входа в систему и пометите службу разрешенным «Взаимодействие с рабочим столом», я ожидаю, что вы сможете это сделать.

Однако я в полной растерянности, почему кто-то вообще захотел бы запускать Outlook из веб-серверного приложения….

Комментарии:

1. Apache запущен от имени учетной записи администратора. Если вы укажете это в окне служб, вы не сможете разрешить взаимодействие с рабочим столом. Эта опция доступна только при разрешении apache запускаться от имени локальной пользовательской системы. Что касается моих причин для этого, то они очень веские.

2. @Abs: ‘good’, без сомнения, имеет совершенно особое значение, о котором я ранее не подозревал 🙂 (кстати: вы повторяете точно те же моменты, что и я, относительно учетной записи службы; разве это не решило вашу проблему?)

3. лол, да, в конечном итоге это сработало, но было необычно, что мне пришлось создать новую учетную запись, а затем это сработало, хотя предыдущая учетная запись, которую я использовал, была учетной записью администратора!

4. Приветствия. Надеюсь, вам понравился связанный фрагмент аудио!

Ответ №2:

Сехе прав (но по какой-то причине я не могу прокомментировать его пост, неважно …). Обычно вы должны получить доступ к средствам MS Office через внешний код, используя определенные OLE-интерфейсы. Вы никогда не используете CreateProcess для запуска Outlook или Word из своей программы, это было бы бессмысленно, потому что как вы можете управлять этим после запуска?

Я предлагаю вам проверить, действительно ли вам это нужно, и есть ли более чистый способ сделать это. Вы можете попробовать создать внешний исполняемый файл C # / VB.NET, который действительно выполняет всю автоматизацию, которая может потребоваться вам для работы с Microsoft Outlook.

Каков реальный сценарий?

И я не люблю поправлять людей, но если я этого не сделаю, это сделает кто-то другой в будущем, и это будет раздражать. Не говорите «через DOS», когда используете приглашение в Windows. 😀

Комментарии:

1. исполняемый Test.exe это консольное приложение на C #, которое я написал, которое получает данные из Outlook и сохраняет их в файл. На самом деле нет другого способа, когда другим нужно получить к этому доступ через Интернет. Существует ли?

2. Хорошо, я понимаю. Извините, я не знал, что вы уже используете промежуточный исполняемый файл. Значит, исполняемый файл использует OLE automation для получения данных из Outlook?

3. не беспокойтесь, я не пояснял, что именно этим я и занимался. Я пытался упростить это. Теперь мне удалось решить проблему благодаря какой-то случайности создания новой учетной записи Windows.

4. Я понимаю. Если вы хотите рассказать мне больше, я здесь.

Ответ №3:

я тоже озадачен тем, захочет ли кто-нибудь это делать.

Если бы вы ДЕЙСТВИТЕЛЬНО хотели это сделать, я думаю, вы могли бы запустить это как «start test.exe » или напишите пакетный файл, который будет запускать его. в принципе, все, что приведет к тому, что фактически запустится приложение с помощью другого процесса.