2012-01-27 26 views
7

Tôi có cấu trúc thư mục cần được thêm vào trình cài đặt. Tôi có 3 phiên bản khác nhau của tập lệnh cài đặt và một trong số đó là tập lệnh nâng cấp, yêu cầu loại trừ một tệp nhất định và thư mục phụ trong thư mục cài đặt của tôi. Vì vậy, tôi làm như sau:NSIS - Tệp/x không loại trừ các tệp/thư mục như được tuyên bố

File /r /x ${InputDir}\data\someFile.xml /x ${InputDir}\data\derbydb\runtime\*.* ${InputDir}\*.* 

Các tập tin xml và thư mục derbydb đã xuất hiện (vì đây là một bản nâng cấp) và vì thế tôi không muốn ghi đè lên chúng. Tuy nhiên, khi chạy trình cài đặt, tôi thấy rõ ràng rằng cả hai tệp đều bị ghi đè và hơn thế nữa, việc xem setup.exe được tạo ra với 7zip cho thấy rằng chúng cũng đã được thêm vào. Một người có thể vừa gọi là

File /r ${InputDir}\*.* 

Vậy có gì sai ở đây? Tôi muốn NSIS có tài liệu hay danh sách tốt hơn với thông số/cú pháp lệnh của họ. (/ Rant)

Trả lời

1

Tôi nghĩ vấn đề là bạn không nên chỉ định đường dẫn đầy đủ đến các tập tin để loại trừ chỉ là một mô hình, vì vậy nói cách khác là lệnh sẽ trông như thế này:

File /r /x data\someFile.xml /x data\derbydb\runtime\*.* ${InputDir}\*.* 
+0

Tôi đã thử điều này và nó không hoạt động. Nó vẫn bao gồm tệp xml bên trong trình cài đặt và ghi đè những gì đã có ở đó. – Rex

1

/x là để loại trừ một số tệp được bao gồm trong trình cài đặt tại thời gian biên dịch.

Nếu tôi hiểu chính xác, bạn muốn tránh ghi đè các tệp trong khi cài đặt/nâng cấp tại thời gian chạy.

Vì vậy, bạn có thể sử dụng cờ biên dịch SetOverwrite trước chỉ thị File. Xem phần hướng dẫn sử dụng 4.8.2.8 SetOverwrite, phần 4.8.2 cũng hiển thị phương thức xử lý động SetOverwrite.

+0

Nhưng vấn đề là nó không loại trừ chúng ngay cả khi biên dịch. Nếu tôi mở tệp thiết lập đã tạo, tôi có thể thấy tệp chứa các tệp tôi muốn loại trừ. – Rex

+0

@Rex: Vâng, tài liệu dường như không nêu rõ rằng đường dẫn thư mục được hỗ trợ cho '/ x' vì chúng là'/r' ... Nó nói: '/ x file | wildcard' – Seki

+0

Nhưng nó không ' t làm việc ngay cả đối với tệp, cho dù bạn sử dụng ký tự đại diện hay cung cấp đường dẫn chính xác. – Rex

3

Tôi thấy rằng

File /x "${DIRECTORY}Foo.img" "${DIRECTORY}*.img" 

không loại trừ Foo.img tại thời gian biên dịch - nó được bao gồm với các tập tin .img khác.

5

NSIS tay (http://nsis.sourceforge.net/Docs/Chapter4.html) phần 4.9.1.5 file chứa sau:

Sử dụng/x chuyển sang loại trừ các tập tin hoặc thư mục.

tôi cố gắng sử dụng các biến thể khác nhau, nhưng chỉ có một làm việc:

SetOutPath $INSTDIR 
File /r /x Config ..\MyProgram\*.* 

nơi "Config" là một thư mục "MyProgram \ Plugins \ Config". NSIS chỉ tìm kiếm theo tên và sẽ sai khi đặt bất kỳ thư mục con nào (ví dụ: "/ x Plugins \ Config" hoặc "/ x $ INSTDIR \ MyProgram \ Plugins \ Config \"). Có một thiếu: nếu bạn có cùng thư mục trong các thư mục khác nhau, bằng cách sử dụng chuyển đổi/r, cả hai thư mục và tệp phù hợp sẽ được tìm kiếm.

1
var pname 
!define pname "Salt v1.2.9.3c" 
File /r /x small-games.info.url "E:\Games\${pname}\*.*" 

bao gồm E: \ Games \ $ {} pname * *, nhưng loại trừ small-games.info..url trong các thư mục

1

Dường như với tôi đó là một lỗi mà là nếu bạn làm:

File /r "C:\folder a\subfolder b" 
File /r /x "subfolder b" "C:\folder b" 

sau đó C:\folder b\subfolder a\subfolder b sẽ vẫn được sao chép như một phần của hoạt động đầu tiên.

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