أتمتة الكلمات لا تعمل إلا للمسؤول ، أو مع تأخير بعد إنشاء كلمة. التطبيق
-
26-09-2019 - |
سؤال
لدينا برنامج تم إجراؤه في بورلاند دلفي يستخدم أتمتة الكلمات لإنشاء مستندات. في التثبيت (الخادم الطرفي) ، يمكننا فقط الحصول على كلمة أتمتة العمل عند التشغيل كمسؤول محلي.
عندما يكون Runnnig كمستخدم ANOTER ، نحصل على رسالة خطأ "Opdracht Mislukt -2146824090" (نسخته الهولندية من المكتب) ، أعتقد أنه تترجم إلى "فشل العملية" أو "فشل الأمر".
قام المستخدم بقراءة/كتابة الوصول إلى المجلد حيث يحاول البرنامج وضع المستند الجديد.
مكتب 2010
64Bits Windows Server 2008 R2 Standard
التطبيق هو تطبيق Windows 32 بت.
إذا قمت بإضافة تأخير (500 مللي ثانية) بعد إنشاء الكلمة. التطبيق ، كل شيء يعمل على أنه Normall.
WordApp := CreateOleObject('Word.Application');
sleep(500);
Doc := WordApp.documents.Open(sFile,EmptyParam,true);
أي شخص يعرف لماذا يعود الأمر CreateOleBject الآن قبل استخدام تطبيق Word؟
المحلول 3
يبدو أن حساب المسؤول الذي يعمل في تأخيره ، ليس لديه أي شيء لديه حقوق للقيام به ، ولكن تحدث هذه الكلمة بشكل أسرع بكثير مع هذا الحساب من حسابات مستخدمي المجال العادية.
يمكنني العيش مع حل المتأخر ، ولكن إذا كان أي شخص يعرف طريقة أفضل ، فيرجى إخبارنا بذلك.
نصائح أخرى
إذا كنت تريد تتبع ذلك ، فيمكنك استخدام أداة مثل ProcessMonitor لتتبع Word Automation Executions حتى النقطة التي يمكنك استخدام التطبيق.
يبدو أن هناك نوعًا من التحقق من الحقوق يحدث - لكن نصف ثانية يبدو الكثير من الوقت لهذا الغرض.
يمكنك محاولة فتح الوثيقة عدة مرات ، أم أن Word قد غمرت تمامًا بعد أن أعطت الخطأ؟
WordApp := CreateOleObject('Word.Application');
while True do
begin
try
Doc := WordApp.documents.Open(sFile,EmptyParam,true);
Break;
except
on E: EOleSysError do
begin
// raise error if it's not the expected "Command failed" error
if E.ErrorCode <> -2146824090 then
raise;
end;
end;
end;
يحرر:
لطفا أنظر جوابي هنا مما يوفر حلاً أفضل وشرحًا لسبب حدوث ذلك.
أدرك أن هذا الموضوع قديم جدًا ، لكنني حللت هذه المشكلة من خلال التأكد من إغلاق المستند قبل الإقلاع عن التدخين (Oledocument.close). من خلال القيام بذلك ، ليست هناك حاجة إلى أي نوع من التأخير ، وما إلى ذلك. انظر مقتطفات رمز Delphi أدناه.
مثال:
oleWord := Unassigned;
oleDocument := Unassigned;
Screen.Cursor := crHourGlass;
try
oleWord := CreateOleObject('Word.Application');
oleWord.Visible := False;
oleWord.DisplayAlerts := False;
oleDocument := oleWord.Documents.Open(Worklist.Filename);
oleDocument.SaveAs(Worklist.Filename, wdFormatDOSTextLineBreaks);
oleDocument.Close;
oleWord.Quit(False);
finally
oleDocument := Unassigned;
oleWord := Unassigned;
Screen.Cursor := crDefault;
end;