2012-06-07 24 views
5

Tôi muốn cài đặt tệp trong các thư mục khác nhau, tùy thuộc vào việc người dùng đã chọn cài đặt cho tất cả người dùng hay chỉ người dùng hiện tại.Đặt DestDir từ Inno Pascal?

Tôi đã thêm CreateInputOptionPage() được sử dụng để tạo trang tùy chọn có hai nút radio.

Tuy nhiên, trình cài đặt của tôi bây giờ rải rác với rất nhiều dòng trùng lặp, giống như hai:

Source: {#ProjectRootFolder}\License.txt; DestDir: {userdocs}\{#MyAppName}; Check: NOT IsAllUsers 
Source: {#ProjectRootFolder}\License.txt; DestDir: {commondocs}\{#MyAppName}; Check:IsAllUsers 

Có cách thanh lịch hơn để làm các việc trên? Ví dụ, mã Pascal có thể tạo biến như #define để tôi có thể sử dụng nó thay cho {userdocs} và {commondocs} ở trên không?

Thông tin chi tiết:

Các IsAllUsers() chức năng cuộc gọi mã này trên:

function IsAllUsers: Boolean; 
begin 
#ifdef UPDATE 
    Result := AllUsersInRegistryIsTRUE; 
#else 
    Result := AllUsersOrCurrentUserPage.Values[1]; // wizard page second radio button 
#endif 
end; 

và:

function AllUsersInRegistryIsTRUE: Boolean; // True if preceding install was to all users' documents 
var 
    AllUsersRegValue: AnsiString; 
begin 
    if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'Software\MyApp', 'AllUsers', AllUsersRegValue) then 
    Result := (UpperCase(AllUsersRegValue) = 'YES') 
    else 
    Result := FALSE; 
end; 
+1

Sertac đã đưa ra một câu trả lời hay, nhưng hãy nhớ rằng người dùng chạy thiết lập có thể không phải là người dùng dự kiến ​​đã đăng nhập vào máy tính. Trong trường hợp này, dữ liệu "chỉ người dùng này" của bạn sẽ kết thúc thuộc về "người dùng này" hoàn toàn khác. – Deanna

Trả lời

6

Will một cái gì đó giống như bộ đồ này?

[Files] 
Source: {#ProjectRootFolder}\License.txt; DestDir: {code:GetDir}\{#MyAppName}; 

... 

[Code] 
var 
    OptionsPage: TInputOptionWizardPage; 

procedure InitializeWizard; 
begin 
    OptionsPage := CreateInputOptionPage(wpUserInfo, 
       'please select', 'the kind of installation', 'and continue..', 
       True, False); 
    OptionsPage.Add('All users'); 
    OptionsPage.Values[0] := True; 
    OptionsPage.Add('This user'); 
end; 

function GetDir(Dummy: string): string; 
begin 
    if OptionsPage.Values[0] then 
    Result := ExpandConstant('{commondocs}') 
    else 
    Result := ExpandConstant('{userdocs}'); 
end; 
+0

Chính xác những gì tôi đang tìm kiếm, Sertac. Tôi không biết cú pháp {code:}. Cám ơn rất nhiều! – RobertFrank

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