การสร้างลิงก์สัญลักษณ์ในตัวติดตั้ง WiX โดยใช้เส้นทางสัมพัทธ์

ฉันพยายามทำบางอย่างเช่นสิ่งที่โพสต์ ที่นี่เกี่ยวกับการสร้างลิงก์สัญลักษณ์ในตัวติดตั้ง WiX โดยจะอธิบายวิธีสร้างส่วนเสริมที่จะสร้างลิงก์สัญลักษณ์ อย่างไรก็ตามนั่นไม่ใช่สิ่งที่ฉันกำลังมองหา ฉันกำลังพยายามใช้บางสิ่งเช่นการสนิปนี้

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

ฉันได้ลองใช้ cmd.exe แทน cmd แล้วและไม่ประสบความสำเร็จ

ฉันจะเรียกการกระทำแบบกำหนดเองดังนี้:

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

ฉันได้ลองโทรหาสิ่งนี้ก่อน InstallFinalize เช่นกัน และฉันก็พบพฤติกรรมเดียวกัน

ฉันตั้งเป้าที่จะสร้างลิงก์สัญลักษณ์ผ่านการตั้งค่านี้ วิธีแก้ปัญหาอื่นที่ฉันมีคือสามารถสร้างทางลัดได้ แต่ฉันไม่สามารถค้นหาวิธีการใช้ตัวเลือกนี้สำหรับสถานที่อื่นนอกเหนือจากเมนูเริ่มหรือเดสก์ท็อปได้มากนัก

เมื่อฉันรันโปรแกรมติดตั้งหลังจากเพิ่มบรรทัดเหล่านี้ มันล้มเหลวในการดำเนินการ หากไม่มีการเรียกการดำเนินการแบบกำหนดเองของลิงก์ Symbolic ฉันจะทำให้โปรแกรมติดตั้งดำเนินการได้สำเร็จ

เป้าหมายสุดท้ายคือการได้รับลิงก์สัญลักษณ์จากไฟล์ทั่วไปที่สามารถเรียกใช้งานได้ไปยังตำแหน่งการติดตั้งของแอปพลิเคชัน

อัปเดต

ฉันได้รับลิงก์ Symbolic เพื่อใช้งานการเปลี่ยนแปลงการกระทำแบบกำหนดเอง ตอนนี้ดูเหมือนว่า:

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

และการเรียกร้องให้ดำเนินการแบบกำหนดเองดังนี้:

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

แต่ตอนนี้เมื่อฉันรันการถอนการติดตั้ง ฉันได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้: 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 แหล่งที่มา
comment
เหตุใดคุณจึงซับซ้อนในการคิดโดยใช้เส้นทางสัมพัทธ์สำหรับไฟล์ .lnk คุณได้ลองใช้เส้นทางที่แน่นอนแล้วหรือยัง? ฉันคิดว่าคุณใส่ใบเสนอราคาผิดด้วย ใช้เครื่องหมายคำพูดด้านนอกเดี่ยว (ExeCommand='something') และเครื่องหมายคำพูดด้านในคู่ (สำหรับเส้นทาง)   -  person zett42    schedule 06.08.2018
comment
@ zett42 ฉันได้ลองทำเช่นนี้กับการตั้งค่าใบเสนอราคาทั้งสองแบบแล้วยังไม่ได้ผลสำหรับฉัน ฉันลองใช้เส้นทางที่แน่นอนไปยังตำแหน่งของไฟล์ Common แต่ไม่ใช่สำหรับไฟล์ .lnk ExeCommand ตอนนี้เป็น ='cmd /c mklink .\linkToItem.lnk "C:\Program Files (x86)\Common Files\Additional Folders\myexecutable.exe"' เมื่อเรียกใช้โปรแกรมติดตั้ง ฉันสังเกตเห็นหน้าต่าง CMD ที่แจ้งว่าการอนุญาตถูกปฏิเสธ   -  person Vince Seely    schedule 10.08.2018


คำตอบ (1)


หากคุณใช้สิ่งนี้เป็นการกระทำของ Custome:

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

ใน InstallExecuteSequence ของคุณจะต้องมี:

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

เพื่อให้แน่ใจว่าจะดำเนินการนี้เฉพาะเมื่อติดตั้งแอปพลิเคชันของคุณเท่านั้น หากคุณต้องการดำเนินการนี้เมื่อติดตั้งใหม่หรือตัวเลือกอื่น ๆ ที่คุณอาจต้องพิจารณาวิธีการดำเนินการดังกล่าวเพิ่มเติม

หากแน่ใจว่าจะทิ้งรอยเท้าไว้เป็นศูนย์หลังจากที่ผู้ใช้ถอนการติดตั้งแอปพลิเคชัน คุณจะต้องลบลิงก์สัญลักษณ์ในภายหลัง ฉันแก้ไขสิ่งนี้โดยทำสิ่งต่อไปนี้:

ก่อนอื่นฉันสร้างอีก CustomAction

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

จากนั้นฉันต้องการอีก InstallExecuteSequence เพื่อดำเนินการนี้ อย่างไรก็ตาม ฉันจำเป็นต้องเรียกใช้สิ่งนี้เมื่อถอนการติดตั้งเท่านั้น ดังนั้นจึงจำเป็นต้องมีเงื่อนไขอื่นในการทำเช่นนั้น ดังนั้นสิ่งนี้จึงดูเหมือน:

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