Уничтожение Excel.EXE на сервере [дубликат]

В статье «Алгоритмы для перечисления всех совершенных, максимальных и максимальных совпадений в двудольных графах» от Takeaki Uno имеется алгоритм. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.8179&rep=rep1&type=pdf

В теореме 2 сказано: «Максимум сопоставления в двудольном графе могут быть перечислены в O (mn ^ 1/2 + nNm) времени и O (m) пространстве, где Nm - число максимальных совпадений в G. "

11
задан Community 23 May 2017 в 12:31
поделиться

13 ответов

Я нашел замечательное решение на этой ссылке: http://www.antionline.com/showthread.php?t=277640

Это действительно работало на меня.

-1
ответ дан 26 October 2019 в 22:28
поделиться

:). Я кратко записал свою перестрелку с Excel здесь. Это также имеет некоторые ссылки, которые я нашел после некоторого тяжелого поиска. Надежда это помогает.
Excel Basically является болью даже при том, что он может быть автоматизирован.

2
ответ дан 3 December 2019 в 01:30
поделиться

К сожалению это, и я не пытаюсь быть умным, но... не помещаю офис на сервер!!!

Это - то, если я понял правильно!:)

Править: Даже при том, что я был отмечен для этого, я никогда не буду защищать рабочий Office на сервере - это доказало слишком большую часть боли в заднице для меня в прошлом.

Однако то же теперь идет для меня и Crystal Reports ;-)

18
ответ дан 3 December 2019 в 01:30
поделиться

Я соглашаюсь с не рабочий Office на сервере. Не то, чтобы у меня есть любой выбор в вопросе :)

Одна вещь иметь в виду с taskkill опцией, то, что, если Вы конкретно не планируете ее (иначе - одиночный элемент), Вы можете иметь несколько копий Excel (или любое другое приложение Office) выполнение и неумышленно закрыть неправильный экземпляр.

Также отметьте это на http://support.microsoft.com/kb/257757

Microsoft в настоящее время не рекомендует и не поддерживает, Автоматизация приложений Microsoft Office ни от какого необслуживаемого, неинтерактивного клиентского приложения или компонента (включая ASP, ASP.NET, DCOM и NT Services), потому что Office может показать нестабильное поведение и/или зайти в тупик, когда Office выполняется в этой среде.

Как альтернатива, существует продукт по имени Ячейки Aspose, который предлагает продукт, который разработан для разрешения, Вы, чтобы программно работать с Excel покрываете в серверной среде. Как правовая оговорка, я лично никогда не использовал этот продукт, но я услышал об этом от нескольких человек, с которыми я работал в прошлом.

6
ответ дан 3 December 2019 в 01:30
поделиться

Команда, в которой Вы нуждаетесь, является "taskkill".

http://technet.microsoft.com/en-us/library/bb491009.aspx

> taskkill excel.exe
2
ответ дан 3 December 2019 в 01:30
поделиться

Вы используете VSTO? Можно закрыть приложение Excel после окончания с excelobject.Quit(); Это работало на меня, но я не использую Excel на серверной стороне больше.

Можно взглянуть на XML-схему Excel для создания файла Excel без самого Excel. Проверьте устройство записи CarlosAg Excel, которое делает точно то же.

3
ответ дан 3 December 2019 в 01:30
поделиться

У меня была подобная проблема. В то время как 'taskkill excel.exe' или перечисляющий все процессы "Excel" и уничтожающий их действительно работает, это уничтожает ВСЕ рабочие процессы Excel. Вы - более обеспеченное уничтожение только экземпляр, с которым Вы в настоящее время работаете.

Вот код, я раньше выполнял это. Это использует PInvoke (см. здесь) получить ProcessID от Excel. Экземпляр приложения (Я. ExcelInstance в примере ниже).

Dim ExcelPID As Integer
GetWindowThreadProcessId(New IntPtr(Me.ExcelInstance.Hwnd), ExcelPID)

If ExcelPID > 0 Then
   Dim ExcelProc As Process = Process.GetProcessById(ExcelPID)
   If ExcelProc IsNot Nothing Then ExcelProc.Kill()
End If

Не это не могло бы работать над всеми платформами из-за PInvoke... До настоящего времени это - единственный метод, который я нашел, чтобы быть надежным. Я также попытался найти корректный PID путем перечисления всех процессов Excel и сравнения Процесса. MainModule. BaseAddress к Excel. Приложение. Hinstance.

'DO NOT USE THIS METHOD, for demonstration only    
For Each p as Process in ExcelProcesses
        Dim BaseAddr As Integer = p.MainModule.BaseAddress.ToInt32()
        If BaseAddr = Me.ExcelInstance.Hinstance Then
            p.Kill()
            Exit For
        End If
Next

Это не надежный способ найти корректный процесс, поскольку BaseAddress иногда, кажется, то же для нескольких процессов (приводящий к уничтожению неправильного PID).

3
ответ дан 3 December 2019 в 01:30
поделиться

Я использовал spreadsheetgear для генерации XL отчетов о сервере, и он работает действительно хорошо. Мы не должны волноваться о процессе EXCEL..

1
ответ дан 3 December 2019 в 01:30
поделиться

Я имел подобную проблему и использовал следующий код:

System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcesses();
for (int i = 0; i < procs.Length; i++)
{
  if(procs[i].ProcessName == "EXCEL")
  {
    procs[i].Kill();
  }
}

Это работало вполне прилично, но я буду действительно думать о работе с Office на сервере.

0
ответ дан 3 December 2019 в 01:30
поделиться

Вы должны безопасно расположить все взаимодействующие с COM объекты после окончания работы. "Всем" я имею в виду абсолютно все: значения свойств наборов и так далее. Я создал объект стека и продвинул объекты во время их установки:

Stack<object> comObjectsToRelease = new Stack<object>();
...
Log("Creating VBProject object.");
VBProject vbProject = workbook.VBProject;
comObjectsToRelease.Push(vbProject);
...
finally
{
    if(excel != null)
    {
        Log("Quiting Excel.");
        excel.Quit();
        excel = null;
    }
    while (comObjectsToRelease.Count > 0)
    {
        Log("Releasing {0} COM object.", comObjectsToRelease.GetType().Name);
        Marshal.FinalReleaseComObject(comObjectsToRelease.Pop());
    }               
    Log("Invoking garbage collection.");
    GC.Collect();
}

Если Excel все еще там, необходимо уничтожить его вручную.

0
ответ дан 3 December 2019 в 01:30
поделиться

У меня на самом деле был вопрос, который был подобен этому некоторое время назад - Проверке на подвешенный процесс Office при использовании Автоматизации делопроизводства - некоторые ответы на тот вопрос могли бы быть полезны для Вас.

Кроме того, я должен согласиться с тем, что все остальные говорят в отношении избегания любых Продуктов Office сервера; однако, так как Вы делаете Excel, это могло бы быть выполнимо, чтобы Вы генерировали XML-документы Excel. Можно сделать это, не имея необходимость делать, любая Автоматизация делопроизводства и процесс довольно просты. Для простых основанных на сетке электронных таблиц я нашел, что это немного легче, чем попытка автоматизировать его использование Excel. Office Открывает, XML довольно мощен и допускает более сложные отчеты, возможны также еще некоторое усилие.

0
ответ дан 3 December 2019 в 01:30
поделиться

Я также не рекомендовал бы использовать офисные приложения на сервере за исключением доступа к данным в mdb файлы.

Я могу определенно понять, что существуют времена, где это необходимо. В thoses случаях я рекомендовал бы следующее:

  • Создайте отдельный сервер, где это - единственная функция. (Позвольте нам, Вы перезагружаете с минимальным влиянием).
  • Имейте реализацию сервера механизм организации очередей запросов
  • Сохраните единственный поток, обрабатывающий очередь. Это дает Вам способность отслеживать офисное приложение, уничтожить его при необходимости и продвинуться, не влияя ни на кого стояли в очереди задания или другие приложения.

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

Ограничение себя сохраняющий очередь работы и только один экземпляр Excel (или любое другое офисное приложение) позволяет нам, Вы уничтожаете его с отказом с TaskKill или.Kill () и не теряете работу.

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

1
ответ дан 3 December 2019 в 01:30
поделиться

У меня было больше времени подумать над этим ответом, и теперь я бы порекомендовал использовать подход XML с форматом электронной таблицы Open XML Office.

Вот несколько хороших ссылок, чтобы приступить к созданию служебный документ с кодом. http://msdn.microsoft.com/en-us/magazine/cc163478.aspx http://msdn.microsoft.com/en-us/library/bb735940 (office.12) .aspx

​​Просто используйте SSIS на SQL Server. Предоставляет возможность экспорта в Excel. Не запускайте офис на сервере. В качестве альтернативы тратьте деньги на aspose или электронные таблицы.

GC действительно работает, если вы не используете его должным образом, следуя этому шаблону ...

   private void killExcel()
        {
          xlApp.Quit();
          Marshal.ReleaseCOMObject(xlApp);
          if(xlApp != null)
          {
            xlApp = null;
          }
          GC.WaitForPendingFinalizers();
          GC.Collect();
          GC.WaitForPendingFinalizers();
          GC.Collect();
        }

заставьте свой рабочий класс Excel реализовать IDisposable, а затем вставьте killExcel () в метод Dispose.

ОБНОВЛЕНИЕ. Также обратите внимание, что иногда разработчик все еще видит, что Excel.exe запущен в диспетчере задач. Прежде чем предположить, что приведенный выше код не работает, убедитесь, что процесс, в котором выполняется код, также закрыт. В случае надстройки VSTO или COM убедитесь, что экземпляр Word / powerpoint / другой excel также закрыт, поскольку все еще есть корень GC, возвращающийся к процессу запуска. Как только это будет закрыто, процесс Excel.exe закроется.

4
ответ дан 3 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: