2014-10-10 12 views
6

Tôi đang gặp sự cố lạ với WiX 3.8 và Trình cài đặt Windows.Windows Installer chỉ thay đổi cài đặt của tôi thành ALLUSERS = 1 sau lưng tôi

Tôi đã tạo plugin Outlook mà tôi muốn người dùng cuối không có quyền quản trị để có thể cài đặt trên máy của họ.

Vì vậy, tôi cẩn thận chắc chắn

  • không viết thư cho bất kỳ thư mục hệ thống cấp cao (như C:\program files vv) trong khi cài đặt
  • không viết thư cho bất kỳ khóa registry hệ thống cấp cao (như HKEY_LOCAL_MACHINE)

và trong kịch bản WiX của tôi, tôi chắc chắn để thiết lập ALLUSERS=0 và cũng đặt tất cả các thuộc tính có liên quan khác mà tôi tìm thấy perUser hoặc limited:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"> 
    <Product Id="*" Name="MyAddin" Language="1033" Version="1.0.0" 
      Manufacturer="Me" UpgradeCode="-some-guid-" Codepage="1252"> 
    <Package InstallerVersion="200" Compressed="yes" 
      InstallScope="perUser" 
      Description="yada yada" Manufacturer="Me" Languages="1033" SummaryCodepage="1252" 
      InstallPrivileges="limited" 
      Comments="yada yada" /> 
    <Property Id="ALLUSERS" Value="0"/> 

tôi đã tưởng tượng rằng sẽ làm việc - nhưng trên hệ thống thử nghiệm của tôi, với một tài khoản bình thường chuẩn do người dùng (không có đặc quyền admin), Mỹ cài đặt thất bại thảm hại - với một hộp thoại thông báo cho tôi rằng tôi không có đủ quyền để cài đặt này cho tất cả người dùng ....

WTF? Tôi đặc biệt muốn cài đặt ứng dụng này cho ** chỉ người dùng * này - không phải tất cả người dùng trên máy!

Nhìn vào các bản ghi MSI, tôi thấy những điều đáng kinh ngạc:

MSI (c) (B0: B4) [18: 08: 08: 543]: Lưu ý: 1: 2262 2: AdminProperties 3: -2147287038
MSI (c) (B0: B4) [18: 08: 08: 543]: Máy trị chính sách 'AlwaysInstallElevated' là 0
MSI (c) (B0: B4) [18: 08: 08: 543 ]: Giá trị chính sách người dùng 'AlwaysInstallElevated' là 0
MSI (c) (B0: B4) [18: 08: 08: 543]: Chạy sản phẩm '........' với đặc quyền của người dùng: Nó không được chỉ định .
...
MSI (c) (B0: B4) [18: 08: 08: 543]: ĐỔI SỞ HỮU: Sửa đổi thuộc tính ALLUSERS. Giá trị hiện tại của nó là '0'. Giá trị mới của nó: '1'.

* Tại sao trên trái đất là Windows Installer quyết định chỉ cần thay đổi ALLUSERS tài sản để 1?!?!? Tôi chưa bao giờ nói với nó !! Sheesh .......

Bất kỳ ý tưởng nào? Suy nghĩ? Con trỏ?

+0

InstallScope (và InstallPrivileges) của bạn phải đủ để bắt buộc cài đặt cho mỗi người dùng. vì vậy tôi sẽ đưa ra ALLUSERS rõ ràng = 0 và xem bạn có nhận được cài đặt cho mỗi người dùng hay không. Bạn vẫn sẽ nhận được các lỗi bảo mật nếu bản cài đặt cố gắng truy cập các mục bị hạn chế, nhưng đó là một vấn đề riêng biệt. – PhilDW

+0

@PhilDW: ** CẢM ƠN! ** Đó là nó - thú vị - bằng cách xóa * * ALLUSERS = 0', tôi đột nhiên nhận được cài đặt cho mỗi người dùng ..... .... bạn nên làm cho câu trả lời này để tôi có thể chấp nhận nó! –

+0

Tôi hy vọng có một cách để nói với trình cài đặt của bạn rằng tôi muốn * cài đặt tất cả người dùng? –

Trả lời

1

InstallScope (và InstallPrivileges) của bạn phải đủ để bắt buộc cài đặt cho mỗi người dùng. vì vậy tôi sẽ đưa ra ALLUSERS rõ ràng = 0 và xem bạn có nhận được cài đặt cho mỗi người dùng hay không. Bạn vẫn sẽ nhận được các lỗi bảo mật nếu bản cài đặt cố gắng truy cập các mục bị hạn chế, nhưng đó là một vấn đề riêng biệt.

11

Theo tài liệu MSI SDK cho ALLUSERS cách chính xác để tạo ra một cài đặt cho mỗi người dùng là để thiết lập AllUsers để "" (viên đạn thứ hai in đậm dưới đây):

  • Một AllUsers giá trị tài sản của 1 xác định bối cảnh cài đặt trên mỗi máy.
  • Giá trị thuộc tính ALLUSERS của chuỗi trống ("") chỉ định ngữ cảnh cài đặt cho mỗi người dùng.
  • Nếu giá trị của thuộc tính ALLUSERS được đặt thành 2, trình cài đặt Windows luôn đặt lại giá trị của thuộc tính ALLUSERS thành 1 và thực hiện cài đặt trên mỗi máy hoặc đặt lại giá trị của thuộc tính ALLUSERS thành chuỗi trống "") và thực hiện cài đặt cho mỗi người dùng. Giá trị ALLUSERS = 2 cho phép hệ thống đặt lại giá trị của ALLUSERS và bối cảnh cài đặt, phụ thuộc vào đặc quyền của người dùng và phiên bản Windows.

Giá trị "0" không xác định để bạn nhận được bất kỳ hành vi không xác định nào mà Windows Installer chọn này (chọn một trong các tùy chọn sau): tuần/tháng/năm/hệ điều hành/gói dịch vụ.

Để biết thêm chi tiết "đằng sau câu chuyện", hãy xem chi tiết this blog entry.

+0

Công cụ WiX trong Visual Studio 2013 sẽ không cho phép tôi để trống giá trị đó: 'Giá trị thuộc tính Giá trị thuộc tính/@ Value không thể là một chuỗi rỗng. Nếu không yêu cầu giá trị, chỉ cần xóa toàn bộ thuộc tính.' ... –

+2

Đúng. Bạn không thể xác định Thuộc tính không ẩn/an toàn không có giá trị. Được gọi là vào cuối mục nhập blog của tôi: http://robmensching.com/blog/posts/2014/10/10/stackoverflow-what-does-allusers0-mean/ –

+0

Tại sao tôi có điều này trong '.wxs của tôi 'tập tin? '' Có một lời giải thích quá: * Thuộc tính này định nghĩa thuộc tính ALLUSERS và đặt nó thành trống, cho biết rằng sản phẩm này sẽ được cài đặt cho mỗi người dùng thay vì cho mỗi máy móc.* – l33t

Các vấn đề liên quan