2012-05-10 42 views
6

Tôi có chương trình cần tạo tệp trong thư mục Tài liệu của tôi khi cài đặt. Đây là một yêu cầu cố định nghiêm ngặt, không có thay đổi điều này. Vấn đề là nếu người dùng thực hiện 'Chạy với tư cách quản trị viên' trên tệp Thiết lập, hằng số innosetups {userdocs} trỏ đến thư mục tài liệu của Quản trị viên không phải là người dùng đã đăng nhập ban đầu.Cách ghi vào thư mục My Documents của người dùng bằng trình cài đặt khi người dùng sử dụng 'Chạy với tư cách quản trị'

Vì vậy, google và thấy điều này:

Install files to original user's My Docs folder via Inno Setup on Windows Vista/7

Câu trả lời là sai, tuy nhiên, vì InnoSetup thậm chí khẳng định rằng

Nếu người dùng khởi động Setup bằng cách kích chuột phải vào tập tin EXE của nó và chọn "Chạy với tư cách là quản trị viên", khi đó cờ này sẽ không có hiệu lực , bởi vì Thiết lập không có cơ hội chạy bất kỳ mã nào bằng thông tin đăng nhập ban đầu của người dùng . Điều này cũng đúng nếu Thiết lập được khởi chạy từ quy trình đã được nâng cấp. Tuy nhiên, lưu ý rằng đây không phải là giới hạn dành riêng cho thiết bị của Inno ; Trình cài đặt dựa trên Windows Installer không thể quay lại thông tin xác thực người dùng ban đầu trong các trường hợp như vậy.

Tôi đoán tôi có thể khuyến khích người dùng không sử dụng Run As Administrator nhưng tôi không biết cách ngăn chặn anh ấy không được nâng cấp.

Tôi đã nghĩ đến việc có thể chương trình tự thiết lập thư mục tên My Documents \ Program trong lần chạy đầu tiên (sau khi được cài đặt). Cách giải quyết này có hoạt động không? Nó sẽ phải sao chép các tập tin từ thư mục tập tin chương trình của nó như là người dùng có khả năng hạn chế. Có thể hay tôi sẽ gặp phải vấn đề của tư nhân?

+1

Tài liệu nào của người dùng có thể được chương trình thiết lập tạo ra? Chương trình thiết lập của bạn có phải là trình xử lý văn bản không? –

Trả lời

5

Câu trả lời cho bản gốc hợp lệ nhưng không được đề xuất. Khi thiết lập được chạy, RunAsOriginalUser sẽ chạy khi người dùng hiện đang đăng nhập vào Windows. Điều này được thực hiện bằng cách thực hiện một phần của quá trình thiết lập không chạy, và sau đó chạy một bản sao khác được nâng cấp để thực hiện cài đặt thực tế.

Khi người dùng thực hiện "Run as admin" một cách rõ ràng, "stub chưa được liên kết" cũng được nâng lên, trong trường hợp đó, thiết lập có thể làm gì để truy cập người dùng ban đầu vì thông tin đó đã được thay thế. Thực hành được chấp nhận là thực hiện bất kỳ công việc cụ thể nào trong ứng dụng như bạn đã đề xuất, điều này cũng có nghĩa là nó sẽ hoạt động cho những người dùng khác và trong môi trường LUA ở trước Vista (Bạn sẽ có chính xác tình huống tương tự như vậy bạn đang thấy bây giờ).

0

Bài viết này có thể cung cấp cho bạn một số hướng dẫn về cách làm việc xung quanh cao,

http://www.codeproject.com/Articles/18946/High-elevation-can-be-bad-for-your-application-How

Nói chung, nó mang lại cho bạn một cơ hội để thực hiện thực thi của bạn (mà tạo ra file dưới My Documents) tại kết thúc cài đặt không có độ cao.

+0

Cách tiếp cận đó có vẻ quá phức tạp để thử trong một ứng dụng thương mại. Tôi sẽ không biết bắt đầu từ đâu nếu có vấn đề. Cảm ơn mặc dù, đó là một giải pháp sáng tạo. – hd112

1

tiên, đảm bảo trình cài đặt sẽ không đòi hỏi đặc quyền cao ngày của riêng mình, bằng cách thiết lập PrivilegesRequired=lowest:

[Setup] 
PrivilegesRequired=lowest 

Để hủy bỏ việc cài đặt, khi cài đặt đang chạy "As Administrator" rõ ràng bởi người sử dụng, trên Windows Vista trở lên, sử dụng IsAdminLoggedOn trong InitializeSetup:

[Code] 

function InitializeSetup(): Boolean; 
begin 
    Result := True; 

    if (GetWindowsVersion >= $05010000) and 
    IsAdminLoggedOn then 
    begin 
    MsgBox('Do not run this installer "As Administrator".', mbError, MB_OK); 
    Result := False; 
    end; 
end; 

Để thảo luận thêm về chủ đề này, thấy Install files to original user's My Docs folder via Inno Setup on Windows Vista/7.

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