2016-08-05 37 views
7

Tôi đang sử dụng tập lệnh .iss để tạo tệp exe ​​ bên trong Inno Setup Compiler. Tôi cần phải đóng gói một số node_modules vào ứng dụng này vì vậy tôi có một dòng dưới [Files] mà trông như thế này:Trình biên dịch thiết lập Inno "Không thể tìm thấy đường dẫn được chỉ định" với đường dẫn dài

Source: "{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs 

Khi tôi biên dịch, tôi nhận được lỗi này:

The system cannot find the path specified.

Đây là đầu ra trình biên dịch:

Compiler Output

Vì vậy, nó xuất hiện để chạy tốt cho đến khi nó bị hủy bỏ. Suy nghĩ ban đầu của tôi là browser.js không tồn tại nhưng sau khi kiểm tra lại, đây không phải là trường hợp. Ngoài ra, tôi đang sử dụng một ký tự đại diện trong đường dẫn nguồn để trình biên dịch biết tệp tồn tại, nhưng có vẻ như đang gặp sự cố khi nén nó.

Một điều khác mà có thể gây ra sự cố là độ dài đường dẫn tệp. Các mô-đun nút thường kết thúc với các đường dẫn tệp cực kỳ vô lý do phụ thuộc lồng nhau. Trong trường hợp này, chiều dài đường dẫn là . Giả sử đây là nguyên nhân gây ra vấn đề, có cách nào để vượt qua nó không?

Trả lời

4

Đó chắc chắn là do một con đường dài. Thông thường các ứng dụng Windows không thể xử lý đường dẫn dài hơn MAX_PATH (260 ký tự).
Xem Naming Files, Paths, and Namespaces trên MSDN.

Cách giải quyết phổ biến là bắt đầu đường dẫn với \\?\ (lại xem bài viết MSDN ở trên). Tiền tố chỉ có thể được sử dụng cho đường dẫn tuyệt đối. Nhưng trình biên dịch trình biên dịch Inno Setup trên đó có thuộc tính Source. Nó tìm kiếm : và nó chỉ chấp nhận đường dẫn có ký tự ổ đĩa trước số : hoặc sử dụng tiền tố compiler: hoặc userdocs:.

Bạn có thể hack bằng cách sử dụng đường dẫn UNC có ID khối lượng (do đó không có dấu hai chấm).

Sử dụng lệnh mountvol để tìm đường dẫn UNC cho ổ đĩa nguồn của bạn.

Và sau đó bạn sẽ có cùng một vấn đề với đường dẫn dài với thuộc tính DestDir, trong khi cài đặt (không phải khi biên dịch). Ở đó, không có vấn đề gì với dấu hai chấm, vì vậy bạn chỉ cần sử dụng tiền tố \\?\.

Source: "\\?\Volume{bb919c3e-bdb1-42b8-9601-6715becd8683}\{#SourcePath}Encore.Warehouse.UI\bin\Warehouse_Release\warehouse\*"; \ 
    DestDir: "\\?\{app}\warehouse"; Flags: ignoreversion recursesubdirs createallsubdirs 
Các vấn đề liên quan