Membuat tautan simbolis di penginstal WiX menggunakan jalur relatif

Saya telah mencoba melakukan sesuatu seperti apa yang diposting di sini tentang membuat tautan simbolik di penginstal WiX. Ini menjelaskan cara membuat add-on yang akan membuat tautan simbolik. Namun bukan itu yang saya cari. Saya mencoba menggunakan sesuatu seperti potongan ini

<CustomAction Id="MakeSymbolicLink" 
   Directory="TARGETDIR" 
   ExeCommand="cmd /c mklink .\linkToItem.lnk '%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe'"  /> 

Saya telah mencoba menggunakan cmd.exe alih-alih cmd untuk ini dan belum berhasil.

Saya kemudian memanggil tindakan khusus seperti ini:

    <Custom Action="MakeSymbolicLink" After="InstallFinalize" />

Saya telah mencoba menelepon ini sebelum InstallFinalize juga dan saya mendapatkan perilaku yang sama.

Saya bertujuan untuk membuat tautan simbolik melalui pengaturan ini. Solusi lain yang saya miliki adalah dapat membuat pintasan namun saya belum dapat menemukan banyak cara melakukan opsi ini untuk tempat selain menu mulai atau Desktop

Ketika saya menjalankan penginstal setelah menambahkan baris-baris ini, ia gagal menjalankannya. Tanpa tindakan kustom tautan Simbolis yang dipanggil, saya dapat menyelesaikan penginstal dengan sukses.

Tujuan akhirnya adalah mendapatkan tautan simbolik dari file umum yang dapat dieksekusi ke lokasi pemasangan aplikasi.

Memperbarui

Saya mendapatkan tautan Simbolik untuk mengubah tindakan kustom sekarang terlihat seperti:

<CustomAction Id="MakeSymbolicLink" 
   Directory="TARGETDIR" 
   ExeCommand='cmd /c mklink .\linkToItem.lnk "%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe"' 
   Execute="deferred"
   Impersonate="no"/> 

dan panggilan ke tindakan khusus seperti ini:

    <Custom Action="MakeSymbolicLink" Before="InstallFinalize" />

Tapi sekarang ketika saya menjalankan uninstall saya mendapatkan pesan kesalahan berikut: There is a problem with this windows installer package. a program run as part of the setup did not finish as expected contact your support personnel or package vendor.


person Vince Seely    schedule 01.08.2018    source sumber
comment
Mengapa Anda memperumit pemikiran dengan menggunakan jalur relatif untuk file .lnk? Sudahkah Anda mencoba menggunakan jalur absolut? Saya juga berpikir Anda salah mengutip. Gunakan tanda kutip luar tunggal (ExeCommand='something') dan tanda kutip ganda dalam (untuk jalur).   -  person zett42    schedule 06.08.2018
comment
@ zett42 Saya telah mencoba melakukan ini dengan kedua pengaturan kutipan, keduanya belum berhasil untuk saya. Saya mencoba menggunakan jalur absolut ke tempat file-file umum berada tetapi tidak untuk file .lnk itu sendiri. ExeCommand sekarang menjadi ='cmd /c mklink .\linkToItem.lnk "C:\Program Files (x86)\Common Files\Additional Folders\myexecutable.exe"' Saat menjalankan penginstal, saya melihat sekilas jendela CMD yang mengatakan izin ditolak.   -  person Vince Seely    schedule 10.08.2018


Jawaban (1)


Jika Anda menggunakan sesuatu seperti ini sebagai tindakan Kustom Anda:

<CustomAction Id="MakeSymbolicLink" 
   Directory="TARGETDIR" 
   ExeCommand='cmd /c mklink .\linkToItem.lnk "%CommonProgramFiles(x86)%\Additional Folders\myexecutable.exe"' 
   Execute="deferred"
   Impersonate="no"/>

di InstallExecuteSequence Anda harus ada:

<Custom Action="MakeSymbolicLink" Before="InstallFinalize">NOT Installed</Custom>

Ini memastikan bahwa ini hanya dijalankan saat pemasangan aplikasi Anda. Jika Anda ingin menjalankan ini saat memasang ulang atau opsi lain, Anda mungkin perlu mencari tahu cara melakukannya lebih lanjut

Jika memastikan tidak meninggalkan jejak setelah pengguna mencopot pemasangan aplikasi, Anda harus menghapus tautan simbolik setelahnya. Saya memecahkan masalah ini dengan melakukan hal berikut:

Pertama saya membuat CustomAction yang lain

<CustomAction Id="RemoveSymbolicLink" 
   Directory="TARGETDIR" 
   ExeCommand='cmd /c DEL .\linkToItem.lnk ' 
   Execute="deferred"
   Impersonate="no"/>

Lalu saya membutuhkan InstallExecuteSequence lagi untuk menjalankan ini. Namun saya hanya perlu menjalankan ini saat uninstall sehingga diperlukan kondisi berbeda untuk melakukannya sehingga yang ini terlihat seperti:

<Custom Action="RemoveSymbolicLink" After="InstallInitialize">Installed AND NOT REINSTALL</Custom>
person Vince Seely    schedule 10.08.2018