2014-06-30 14 views
15

Tôi mới vào trình cài đặt wix. Tôi đã phát triển một thiết lập bằng cách sử dụng trình cài đặt wix cho ứng dụng của tôi và tôi cần phải thực hiện một hành động tùy chỉnh để chạy một lệnh trong cmd.exe. Trong XP nó hoạt động tốt. Nhưng trong Windows 8 & 7 nhắc lệnh cmd cần được chạy với tư cách quản trị viên.Chạy ExeCommand trong tùy chỉnhHành động như chế độ Quản trị viên trong Trình cài đặt Wix

Tôi đã googled và tìm thấy các từ khóa Đặc quyền nâng cao và mạo danh có thể giúp tôi.

<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"></Package> 

Như bạn thấy ở trên, tôi đã sử dụng các thuộc tính InstallScope thiết lập để perMachine, và tôi đã sử dụng Mạo danh = "Không" trong các yếu tố CustomAction:

<CustomAction Id='comReg' Directory='INSTALLLOCATION' Impersonate='no' 
    ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]myProduct.dll" /codebase' Return='check' /> 

Nhưng tôi đã không nhận được bất kỳ thay đổi trong khi cài đặt. Tôi cần dấu nhắc lệnh để mở và chạy lệnh trên trong Chế độ quản trị viên.

Và bất cứ ai có thể vui lòng cho tôi biết về những từ khóa "đặc quyền nâng cao & mạo danh"

<InstallExecuteSequence> 
    <Custom Action='comReg' After='InstallFinalize'>NOT REMOVE</Custom> 
    <Custom Action='comUnreg' Before='RemoveFiles'>REMOVE</Custom> 
</InstallExecuteSequence> 

Làm thế nào để làm điều đó?

Trả lời

26

Các wix documentation here giải thích các thuộc tính Mạo danh:

thuộc tính này xác định xem Windows Installer, mà thực hiện như LocalSystem, nên mạo danh bối cảnh sử dụng của người sử dụng cài đặt khi thực hiện hành động tùy chỉnh này. Thông thường giá trị phải là 'có', ngoại trừ khi hành động tùy chỉnh cần đặc quyền nâng cao để áp dụng thay đổi cho máy.

Bạn cũng cần hiểu sự khác biệt giữa hành động tùy chỉnh bị hoãn lại và tùy chỉnh ngay lập tức. Xem thuộc tính Thực thi trên cùng một trang trợ giúp:

Thuộc tính này cho biết lịch biểu của hành động tùy chỉnh. Giá trị của thuộc tính này phải là một trong các yếu tố sau:

hoãn lại Cho biết hành động tùy chỉnh chạy trong tập lệnh (có thể có đặc quyền nâng cao). ngay lập tức Cho biết rằng hành động tùy chỉnh sẽ chạy trong thời gian xử lý thông thường với đặc quyền của người dùng. Đây là mặc định.

Hiện tại, hành động tùy chỉnh của bạn là ngay lập tức, có nghĩa là nó đang chạy với đặc quyền của người dùng. Xem this blog post cho rất nhiều chi tiết, nhưng đặc biệt:

Bất kỳ hành động tùy chỉnh ngay lập tức mạo danh người dùng cách gọi. Trước Windows Vista, đây không phải là vấn đề vì tại thời điểm này, người dùng quản trị cài đặt có một mã thông báo đặc quyền. Với việc giới thiệu UAC trong Windows Vista, mã thông báo quản trị mặc định với UAC được bật là mã thông báo được lọc và không giữ tất cả các đặc quyền. Vì hành động tùy chỉnh ngay lập tức không được phép sửa đổi trạng thái máy - chỉ để thu thập dữ liệu trạng thái và lên lịch các hành động tùy chỉnh để chạy hoãn - điều này vẫn không phải là vấn đề.Sau khi tất cả, vào thời điểm này, các thế hệ của quá trình cài đặt và rollback kịch bản là tất cả những gì nên xảy ra.

Bạn không bao giờ nên sửa đổi trạng thái máy bằng hành động tùy chỉnh ngay lập tức. Sử dụng một chậm, và giữ mạo danh hoặc không có, và nó sẽ làm việc:

<CustomAction Id='comReg' Directory='INSTALLLOCATION' Execute='deferred' Impersonate='no' ExeCommand='"[NETFRAMEWORK40CLIENTINSTALLROOTDIR]regasm.exe" "[INSTALLLOCATION]EAWordImporter.dll" /codebase' Return='check' /> 

EDIT: Lịch trình các hành động tùy chỉnh bằng cách sử dụng các yếu tố InstallExecuteSequence:

<InstallExecuteSequence> 
    <Custom Action='comReg' Before='InstallFinalize'/> 
</InstallExecuteSequence> 
+0

nó chỉ cho tôi một lỗi như Lỗi ICE77: comReg là một hành động tùy chỉnh trong kịch bản. Nó phải được giải mã ở giữa hành động và hành động InstallInitialize InstallFinalize trong bảng InstallExecuteSequence @tjleigh – Arshad

+0

ở đâu bạn lên kế hoạch hành động tùy chỉnh của bạn? Nhìn vào phần tử '' của bạn. Khi trạng thái lỗi, nó cần phải nằm giữa InstallInitialize và InstallFinalize. Tôi có lẽ sẽ đặt nó 'Before =" InstallFinalize "'. – tjleigh

+0

@ tjleigh: Tôi đã chỉnh sửa câu hỏi của tôi, bạn có thể vui lòng giúp tôi ra khỏi điều này.! – Arshad

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