2011-11-18 29 views
10

Tôi muốn tự động lấy thư mục nguồn (và thư mục đích) để cài đặt 32/64 bit. Vậy làm thế nào tôi có thể xác định rằng trong phần [Tập tin] của thiết lập Inno. Sau đây đưa ra một lỗi biên dịch: ->Làm cách nào để sử dụng "mã" trong phần [Tệp] của Inno Setup?

[Files] 
Source: {#MySourcePath}\{code:GetSourceLibFolder}\*.jar; DestDir: {code:GetAppDir}\lib\; 

Tôi có GetSourceLibFolder()GetAppDir() chức năng được xác định trong phần mã. Các chức năng rất đơn giản và chỉ trả về một biến:

function GetSourceLibFolder(Param: String): String; 
begin 
    Result:= SourceLibFolder; 
end; 

function GetSourceBinFolder(Param: String): String; 
begin 
    Result:= SourceBinFolder; 
end; 

Cảm ơn!

+1

Tôi không chắc liệu chúng tôi có thể gọi mã của chúng tôi từ '[Code]' và sử dụng chúng ở những nơi khác trong tập lệnh InnoSetup hay không. Cách sử dụng câu lệnh '# define' để tạo một chuỗi áp dụng các hàm của bạn (giống như trong [http://stackoverflow.com/questions/2329979/can-the-setup-filename-be-derived-from-the-executable -file-version-number] (http://stackoverflow.com/questions/2329979/can-the-setup-filename-be-derived-from-the-executable-file-version-number)) –

+0

Nguồn này ở đâu lib thư mục: là nó trong thư mục nguồn liên quan đến thư mục cơ sở của kịch bản InnoSetup của bạn? Tại sao bạn quan tâm đến thư mục đích khi bạn chỉ có thể sử dụng '{app}'? Ví dụ: giả sử tệp kịch bản InnoSetup của bạn nằm trong thư mục '. \' Và thư viện jar của bạn nằm trong '. \ Install \ lib' và bạn muốn chúng nằm trong thư mục' lib' của thư mục ứng dụng '{app}', bạn có thể định nghĩa 'Source:" install \ lib \ *. jar "; DestDir: "{app} \ lib" 'Cách dễ dàng: bạn có thể có một kịch bản InnoSetup riêng biệt cho mỗi thiết lập 32 bit và 64 bit bằng cách xác định thư mục nguồn khác nhau trong mỗi tệp kịch bản lệnh. – ecle

+0

@eee: Tôi muốn có một trình cài đặt duy nhất cho các hệ thống 32 và 64 bit và vì vậy tôi có 2 thư mục "lib" khác nhau, viz. lib-32 và lib-64, mà tôi đặt động và do đó muốn đọc chúng động. – Saurabh

Trả lời

4

Đường dẫn nguồn cần được sử dụng trong thời gian biên dịch (trừ khi bạn có cờ external) có nghĩa là bạn phải sử dụng ISPP và #define. Phần [Code] chỉ dành cho mã thời gian chạy/cài đặt, vì vậy sẽ hoạt động cho đường dẫn đích.

Nếu bạn cung cấp mã cho hàm GetSourceLibFolder của mình, ai đó có thể chuyển đổi nó thành ISPP.

+0

Cảm ơn! Tôi đã chỉnh sửa bài đăng gốc của mình để bao gồm định nghĩa hàm. – Saurabh

+0

Và một lần nữa 'SourceLibFolder' là gì? hãy nhớ rằng nó cần phải có thời gian biên dịch, không phải thời gian chạy. – Deanna

+0

'SourceLibFolder' là biến toàn cầu nhận giá trị trong phần mã của biến' DefaultDestDir' trong phần '[Setup]': 'DefaultDirName = {code: SetProgramFileLocation} \ HP \ Pulse \ {# MyAppName}' – Saurabh

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