أمر النسخ لا يعمل باستخدام Wix Custom Action
سؤال
لدي ما يلي 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
-عنصر لمهمتك؟بهذه الطريقة لن تضطر إلى التعامل مع نافذة الصدفة وما إلى ذلك.