Ошибка автоматизации WordPerfect COM
В C# .Net 4.0 я пытаюсь автоматизировать WordPerfect.
Для этого я добавляю ссылку в своем проекте в wpwin14.tlb
файл, который находится в папке программы WordPerfect.
Это приводит к созданию COM-интерфейсов в моем проекте.
Затем я должен быть в состоянии написать код, который создает экземпляр WordPerfect.PerfectScript
объект, который я могу использовать для автоматизации WordPerfect.
Однако, когда я пытаюсь создать экземпляр объекта WordPerfect.PerfectScript, C# выдает ошибку:
"Невозможно привести объект COM типа 'System.__ComObject' к типу интерфейса 'WordPerfect.PerfectScript'. Эта операция завершилась неудачно, поскольку вызов QueryInterface для компонента COM для интерфейса с IID '{C0E20006-0004-1000-0001-C0E1C0E1C0E1}'не удалось из-за следующей ошибки: RPC-сервер недоступен. (Исключение из HRESULT: 0x800706BA)."
В этом сообщении нужно сосредоточиться (я верю), что сервер RPC недоступен.
Я пробовал это с WordPerfect работает в фоновом режиме и без. И я пошел к своим службам и удостоверился, что все службы RPC были запущены и все перезапускали.
Возможно ли, что я заблокирован брандмауэром? Это мое единственное слабое предположение
2 ответа
Я просто обертываю это как вызов OLE и очищаю свой COM-объект с помощью FinalReleaseComObject.
Вот простой класс-обертка, который я использовал, чтобы открывать документы Wp и конвертировать их в PDF. Это хорошо очищается в нашем автоматизированном процессе:
public class WpInterop : IDisposable
{
private bool _disposed;
private PerfectScript _perfectScript;
public PerfectScript PerfectScript
{
get
{
if (_perfectScript == null)
{
Type psType = Type.GetTypeFromProgID("WordPerfect.PerfectScript");
_perfectScript = Activator.CreateInstance(psType) as PerfectScript;
}
return _perfectScript;
}
}
protected void Dispose(bool disposing)
{
if (disposing)
{
Marshal.FinalReleaseComObject(_perfectScript);
}
_disposed = true;
}
public void Dispose()
{
if (_disposed == false)
{
GC.SuppressFinalize(this);
Dispose(true);
}
}
}
Убедитесь, что в вашей версии WordPerfect установлены все пакеты обновления и исправления. Этот шаг исправил много случайных проблем для меня за эти годы. Похоже, вы используете X4, который больше не поддерживается Corel, что означает, что обновления больше не находятся на его веб-сайте. Вы должны использовать версию 14.0.0.756 (SP2 плюс 2 исправления).
Я просто удалил WPX4 и переустановил его без обновлений пакета обновления. Запуск этого кода дал точную ошибку в качестве OP:
using System.Runtime.InteropServices;
using WordPerfect;
namespace WP14TLB
{
class Program
{
static void Main(string[] args)
{
PerfectScript ps = new PerfectScript();
ps.WPActivate();
ps.KeyType("Hello WP World!");
Marshal.ReleaseComObject(ps);
ps = null;
}
}
}
Установка сервисных пакетов "волшебным образом" устранила проблему.
Кстати, для дальнейшего использования, вы также можете попробовать форумы WPUniverse. Есть немало экспертов WP, которые регулярно отвечают на сложные вопросы.
Здесь также есть ссылка на обновления X4 :