2013-06-21 40 views
17

Sau example here, tôi đã thêm lối tắt vào ProgramMenuFolder để khởi chạy ứng dụng của mình. (Mã của tôi thực sự là đơn giản vì tôi không cần các thư mục phụ.)(WiX) Phím tắt tệp chương trình cho mỗi máy cài đặt

<DirectoryRef Id='ProgramMenuFolder'> 
    <Component Id='cmpStartMenuShortcut' 
      Guid='MY GUID HERE'> 
    <Shortcut Id='StartMenuShortcut' 
       Name='$(var.ProductName)' 
       Icon='MainIcon.ico' 
       Description='$(var.ProductName)' 
       Target='[ClientDir]myapp.exe' 
       WorkingDirectory='ClientDir'/> 
    <RegistryValue Action='write' Type='integer' Root='HKCU' 
        Key='Software\Company\Product Name' 
        Name='installed' Value='1' KeyPath='yes'/> 
    </Component> 
</DirectoryRef> 

Kể từ khi cài đặt của tôi là mỗi máy (AllUsers = 1, Gói/@ InstallPrivileges = 'cao', và @ InstallScope = 'perMachine ') ProgramMenuFolder là thư mục cho tất cả người dùng trên máy.

Câu hỏi của tôi phải thực hiện với giá trị đăng ký. Sự hiểu biết của tôi là nó chỉ cần để cung cấp một KeyPath cho thành phần có chứa các phím tắt. Mẫu sử dụng HKCU, là một vị trí cho mỗi người dùng.

Không phải là một sai lầm khi sử dụng giá trị cho mỗi người dùng dưới dạng KeyPath cho thành phần cho mỗi máy?

Nếu máy có hai quản trị viên và quản trị viên số 1 cài đặt sản phẩm và quản trị viên # 2 sửa chữa, Windows Installer sẽ không thấy giá trị đăng ký và nghĩ rằng phím tắt bị thiếu và cài đặt trùng lặp, phải không?

Vì vậy, tôi cố gắng thay đổi RegistryValue/@ gốc để HKLM, nhưng sau đó WiX phàn nàn: LGHT0204

lỗi: ICE38: Component cmpStartMenuShortcut cài đặt vào hồ sơ của người dùng. Đó là [sic] KeyPath khóa registry phải thuộc HKCU.

lỗi LGHT0204: ICE43: Thành phần cmpStartMenuShortcut có các phím tắt không được quảng cáo. Đó là [sic] KeyPath khóa registry nên thuộc HKCU.

lỗi LGHT0204: ICE57: Thành phần 'cmpStartMenuShortcut' có cả dữ liệu trên mỗi người dùng và mỗi máy với KeyPath trên mỗi máy.

Tôi không hiểu tại sao khóa phải nằm trong HKCU.

Trả lời

11

Kiểu lối tắt đó là cho một mục tiêu có thể không được cài đặt ngay bây giờ hoặc tại thời điểm nó được gọi. Nó tạo ra tập tin shortcut .lnk cổ điển. Tính năng này hữu ích cho các lối tắt đến các mục tiêu mà trình cài đặt của bạn không chịu trách nhiệm nhưng có thể hữu ích cho người dùng sản phẩm của bạn để sử dụng (ví dụ: cmd.exe).

Cách khác, lối tắt cho mục tiêu bạn đang cài đặt hoặc quảng cáo sẽ được gỡ cài đặt khi mục tiêu không được sửa đổi (sản phẩm được gỡ cài đặt). Ví dụ: WiX cài đặt một phím tắt đến wix.chm được gọi là Tài liệu WiX. Phần tử Shortcut cho một shortcut được quảng cáo có thể được tạo thành một phần tử con của phần tử File.

Dưới đây là một ví dụ viết tay:

<Component Id="ProductComponent"> 
    <File Source="$(var.ConsoleApplication1.TargetPath)" KeyPath="yes"> 
    <Shortcut Id="$(var.ConsoleApplication1.TargetName)Shortcut" 
       Name="$(var.ConsoleApplication1.TargetName)" 
       Advertise="yes" 
       Description="Starts $(var.ConsoleApplication1.TargetName)" 
       Directory="ProgramMenuFolder" /> 
    </File> 
</Component> 

Để chèn các yếu tố Shortcut vào sản lượng nhiệt của, vượt qua nó đường dẫn đến một XSL biến đổi. Snippet:

<xsl:template match="wix:File[contains(@Source,'\myapp.exe')]"> 
    <xsl:copy-of select="." /> 
    <Shortcut Id='StartMenuShortcut' 
      Advertise="yes" 
      Name='$(var.ProductName)' 
      Icon='MainIcon.ico' 
      Description='$(var.ProductName)' 
      WorkingDirectory='ClientDir'/> 
</xsl:template> 
+2

Cảm ơn. Giải pháp này dường như đang làm việc cho tôi. Tôi không biết tôi sẽ phải học về XSLT khi tôi bắt đầu xuống đường WiX. –

+1

Bạn chưa thực sự trả lời lý do tại sao một lối tắt không được quảng cáo không thể viết 'KeyPath' thành HKLM, hoặc tại sao một lối tắt không được quảng cáo yêu cầu ** registry ** 'KeyPath' nhưng không được quảng cáo. –

0

Điều tôi khuyên bạn nên làm chỉ đơn giản là tạo thư mục như bạn đã nói, nhưng không đặt lối tắt ngay bên dưới thư mục đó. Thay vào đó, hãy tạo thành phần phím tắt bên dưới thành phần đang giữ tệp. Bạn có thể sử dụng thuộc tính Thư mục để chỉ định nơi bạn muốn phím tắt xuất hiện.

+0

Cảm ơn đề xuất.Thật không may, các thành phần giữ tập tin được tạo ra bởi nhiệt (và tái sinh định kỳ), do đó, nó không phải là thực tế để sử dụng phương pháp đó. Và tôi thực sự muốn hiểu _why_ đó là lỗi khi sử dụng vị trí trên mỗi máy làm KeyPath cho thành phần cho mỗi máy. –

+1

Vấn đề chính ở đây là toàn bộ menu bắt đầu là mỗi người dùng. Người dùng mà bạn đang tham chiếu là toàn bộ nhóm Người dùng, nhưng vẫn được người cài đặt Windows coi là một người dùng. – Adkins

+0

Không phải trình đơn bắt đầu là chế độ xem kết hợp của các yếu tố cho mỗi người dùng và trên mỗi máy? Khi tôi chạy trình cài đặt cho mỗi máy, phím tắt sẽ được thêm vào Tất cả người dùng \ Start Menu \ Programs không phải \ Start Menu \ Programs. –