2010-07-15 19 views
7

tôi nhận thấy cảnh báo này trong tài liệu cho phương pháp RmDir NSIS của:

Cảnh báo: sử dụng rmdir/r $ INSTDIR trong chương trình cài đặt là không an toàn. Mặc dù không thể, không thể, người dùng có thể chọn cài đặt vào thư mục Tệp Chương trình và do đó lệnh này sẽ xóa toàn bộ thư mục Program Files, bao gồm các chương trình khác không có gì để làm với trình gỡ cài đặt.

Điều này làm tôi sợ, từ trước đến giờ tôi chưa xem xét khả năng này và tôi có dòng chính xác trong kịch bản của mình. Nhưng khi tôi kiểm tra xem điều này có xảy ra hay không bằng cách cài đặt chương trình của tôi đến một vị trí đã tồn tại trước đó chứa các tệp đã tồn tại trước đó và sau đó chạy trình gỡ cài đặt của tôi với RmDir /r /REBOOTOK $INSTDIR trong đó, các tệp hiện có không bị tổn hại.

Đây có phải là cảnh báo lỗi thời không? Tôi đang sử dụng NSIS phiên bản 2.46.

Cảm ơn

Trả lời

6

RmDir/r sẽ xóa toàn bộ cây thư mục nếu có thể, vì vậy "không an toàn". Xem http://nsis.sourceforge.net/Uninstall_only_installed_files để biết cách chỉ xóa các tệp bạn cài đặt

+0

gì nếu tôi là để tạo ra một thư mục phụ tại $ INSTDIR và đặt tất cả dữ liệu chương trình của tôi trong đó, đệ quy xóa tiểu dir, và sau đó làm một rmdir thường xuyên trên $ INSTDIR gốc? – Cuga

+0

Vâng, nó sẽ giúp, nhưng vấn đề vẫn có thể có. Cho phép nói thư mục con của bạn được đặt tên là system32 và người dùng cài đặt% windir%, sau đó bạn sẽ xóa% windir% \ system32 – Anders

+0

Tôi nghĩ mình sẽ mạo hiểm với việc tạo một subdir bên trong INSTDIR có tên: ... I nghĩ rằng điều này sẽ làm việc. – Cuga

2

RMDir trên thư mục không có/r (đệ quy) sẽ xóa thư mục nếu thư mục trống. Tại một số điểm họ đã thêm tính năng này, không chắc chắn khi nào.

NSIS Scripting Reference - RMDir

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