سؤال

لدي ما يلي CustomAction:

<CustomAction Id="CopyToSystem32" ExeCommand="copy /y 64bits.txt C:\Windows\System32" Directory="INSTALLFOLDER" Impersonate="no" Execute="deferred" Return="asyncWait" />

<InstallExecuteSequence>
  <Custom Action="CopyToSystem32" After="InstallFiles" >VersionNT64</Custom>
</InstallExecuteSequence>

لذلك عندما يكتشف نظام تشغيل 64 بت، فإنه سيقوم بنسخ الملف إلى مجلد System32.إذا قمت بتنفيذه باستخدام ملف .bat، فإنه يعمل بشكل جيد.لكنني أفضل أن يكون أمرًا دفعيًا.

يقول السجل ما يلي:

MSI (s) (74:AC) [10:08:33:473]: Executing op: ActionStart(Name=CopyToSystem32,,)
Action 10:08:33: CopyToSystem32. 
MSI (s) (74:AC) [10:08:33:473]: Executing op:         CustomActionSchedule(Action=CopyToSystem32,ActionType=3234,Source=C:\Program Files    (x86)\SetupProject\,Target=copy /y 64bits.txt C:\Windows\System32,)
MSI (s) (74:AC) [10:08:33:474]: Executing op:     ActionStart(Name=RegisterProduct,Description=Registering product,Template=[1])
Action 10:08:33: RegisterProduct. Registering product
MSI (s) (74:AC) [10:08:33:474]: Executing op: ChangeMedia(,MediaPrompt=Please insert the disk:     ,MediaCabinet=1\cab1.cab,BytesPerTick=0,CopierType=1,,,SignatureRequired=0,,,IsFirstPhysicalMedia=1)
MSI (s) (74:AC) [10:08:33:474]: Executing op:     DatabaseCopy(DatabasePath=C:\Windows\Installer\32ea43.msi,ProductCode={0C013216-61FB-4283-AF0A-    6CB264019F5B},,,)
MSI (s) (74:AC) [10:08:33:474]: Note: 1: 1402 2:     UNKNOWN\Products\612310C0BF163824FAA0C62B4610F9B5\InstallProperties 3: 2 
1: CopyToSystem32 2: 1631    

أي فكرة عن السبب ExeCommand لا يتم نسخ الملف الخاص بي؟

شكرًا!

هل كانت مفيدة؟

المحلول

بقدر ما أعلم copy هو جزء من مترجم قذيفة الأوامر وليس أمرا في حد ذاته.على سبيل المثال، يمكنك التحقق من ذلك إذا كنت على سبيل المثال.افعل أ dir copy.* /s في ال Windows-مجلد.لا يوجد ملف ينفذ بشكل مستقل copy.ما تستطيع فعله:ألحق استدعاء مترجم الأوامر، على سبيل المثال:

cmd /c copy /y 64bits.txt C:\Windows\System32

ال /c- المعلمة تخبر المترجم بالإغلاق بعد التنفيذ (يمكنك أيضًا استخدام [%COMSPEC]-متغير البيئة بدلا من cmd).يمكنك أيضًا استخدام CAQuietExecute إجراء مخصص لمنع ظهور نافذة cmd المنبثقة، كما هو موضح هنا.
ربما يمكنك أيضًا استخدام CopyFile-عنصر لمهمتك؟بهذه الطريقة لن تضطر إلى التعامل مع نافذة الصدفة وما إلى ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top