2009-04-30 33 views
11

Tôi có dự án Winforms với một tệp .exe duy nhất làm đầu ra chính. Tôi đang sử dụng một dự án triển khai để phân phối nó, nhưng tệp .exe không được cập nhật khi phiên bản mới được cài đặt, nghĩa là tôi phải yêu cầu người dùng gỡ cài đặt theo cách thủ công và sau đó cài đặt phiên bản mới.Dự án triển khai không cập nhật .exe

Đây là những gì tôi đang làm:

  • tôi tăng phiên bản lắp ráp trên các dự án đầu ra (mà là sản phẩm chính của dự án triển khai)
  • tôi tăng phiên bản dự án triển khai (và cập nhật mã sản phẩm khi được nhắc)
  • dự án triển khai được thiết lập để loại bỏ các phiên bản trước
  • tài sản trên .exe 'vĩnh viễn' được đặt thành False

Tôi chắc chắn rằng tôi đã làm điều này trước khi thành công, nhưng tôi dường như không thể làm điều đó ngay bây giờ. Tôi đang làm gì sai?

Edit: Tôi đã nhận nó để làm việc bằng cách thay đổi phiên bản tập tin trong các thuộc tính dự án, như trong this answer

+0

+1 để có giải pháp tốt và hiệu quả. Nó hữu ích. –

Trả lời

9

Thật khó để nói những gì có thể gây ra này. Làm cách nào để cài đặt MSI không xóa phiên bản trước? Tôi khuyên bạn nên chạy bản cài đặt không hoạt động với ghi nhật ký chi tiết. Tôi sẽ chạy nó từ dòng lệnh như thế này:

msiexec /i "project.msi" /l*v "c:\install.log" 

/l kể msiexec (đó là dịch vụ cài đặt) để tạo ra một bản ghi, * nói với nó để đăng nhập tất cả mọi thứ, và v cho nó để sử dụng chế độ verbose.

Chạy điều đó và xem tệp nhật ký và nó sẽ cho bạn biết những gì không thành công và tại sao. Bạn cũng có thể đăng tệp nhật ký đó ở đây và tôi cá là chúng ta có thể tìm thấy thứ gì đó cùng nhau.

CÂU HỎI THÊM: Tệp nhật ký làm cho tệp trông giống như trình cài đặt cho rằng không có gì để làm. Khi bạn cập nhật phiên bản tệp, bạn đang cập nhật những gì? Làm thế nào để bạn có các tệp được bao gồm để được triển khai? Bạn có chúng được bao gồm như là "đầu ra chính" trong dự án thiết lập, hoặc là bạn bao gồm các hội đồng trực tiếp? Bạn có nó xác định các phụ thuộc và tự động bao gồm chúng, hoặc bạn đã bao gồm một đầu ra dự án?

CẬP NHẬT Xem bài đăng này để biết mô tả những gì cần thay đổi để tự động nâng cấp MSI. Question 511789

+1

Tôi tìm thấy điều này trong nhật ký: Tệp: C: \ Program Files (x86) \ Company \ Project \ Project.exe; \t Sẽ không ghi đè; \t Sẽ không vá; \t \t Tệp hiện có có phiên bản bằng nhau Tôi phải làm gì để làm cho nó thấy rằng tệp đã thay đổi? – stuartd

+0

xem tệp này ngay bây giờ. chỉnh sửa câu hỏi gốc và đặt liên kết nhật ký ở đó để người khác có thể dễ dàng tìm thấy nó hơn. –

+0

Cảm ơn sự giúp đỡ của bạn, tôi nghĩ rằng tôi đã có nó làm việc ngay bây giờ. Tôi đã nhận thấy rằng câu hỏi bạn đề cập đến tiểu bang: "Mã Nâng cấp không bao giờ nên thay đổi" – stuartd

1

Bạn đang cố gắng cập nhật trong khi ứng dụng đang chạy? Nếu vậy, nó sẽ không thể. Bạn cần suy nghĩ một cách tốt hơn, như sử dụng một ứng dụng nhỏ bên ngoài để giết tiến trình đang chạy hiện tại, và cài đặt bản cập nhật và khởi động lại phiên bản mới.

+0

Không, ứng dụng không chạy. – stuartd

1

Bạn có thể thử xây dựng lại trên giải pháp. Bạn cũng có thể làm sạch nó trong khi bạn đang ở đó. Tôi có thể thấy điều này sẽ xảy ra như thế nào nếu tất cả những gì bạn thay đổi là các tệp nội dung. Nếu không, sau đó bỏ qua.

5

Tệp thi hành của ứng dụng của bạn có thể không cập nhật vì bạn không tăng nguồn thông tin VERSION trong dự án MFC của mình.

Không đủ để chỉ tăng phiên bản dự án thiết lập.Xem dưới đây:

http://msdn.microsoft.com/en-us/library/6fkzft86.aspx

"thông tin bản cũng được sử dụng bởi các API thiết lập."

+0

Tôi có dự án MFC? Đây là phiên bản C# – stuartd

5

Cuối cùng đã tìm ra điều này sau khi đập đầu vào tường trong nhiều giờ.

Vấn đề của tôi giống hệt với vấn đề này và kết thúc là rất đơn giản để giải quyết. Hai câu trả lời ở trên đã dẫn tôi đi đúng hướng và giúp tôi tìm ra vấn đề của tôi nhưng ở đây nó là tóm lại.

Nếu bạn đã đặt RemovePreviousVersion thành true thì vấn đề rất có thể xảy ra trong cài đặt ứng dụng trong nút thông tin lắp ráp.

Tôi chạy các bản ghi như mohlsen cho thấy trong câu trả lời ở trên, msiexec/i "project.msi"/l * v "c: \ install.log" và kết thúc với cùng một phản ứng, Sẽ không ghi đè; Sẽ không vá; tập tin hiện tại là một phiên bản bằng

Inverse chỉ cho tôi đi đúng hướng mà còn ném tôi ra một chút với các tài liệu tham khảo MFC. Tôi đang viết một ứng dụng windows và cuối cùng đặt hai và hai lại với nhau và đi đến các thuộc tính của ứng dụng tôi đang viết dưới tab Ứng dụng. Có một nút gọi là Assembly Information dẫn đến phiên bản lắp ráp và phiên bản tập tin. Tôi tăng lên và bây giờ cập nhật tập tin .exe của tôi.

Vì vậy, bạn phải làm hai việc, tăng phiên bản lắp ráp thực tế trong ứng dụng bạn đang viết cũng như phiên bản của gói cài đặt.

+0

Tăng tốc lắp ráp đã giúp. –

5

thêm Một mẹo: nếu bạn mở file AssemblyInfo.cs cho dự án của bạn, và thay đổi AssemblyVersion để

[assembly: AssemblyVersion ("1.0 *")]

sau đó thông tin phiên bản lắp ráp là tự động cập nhật mỗi khi bạn xây dựng dự án. Sau đó nhận xét ra hoặc loại bỏ các mục AssemblyFileVersion từ cùng một tập tin, do đó, phiên bản tập tin mặc định giống như phiên bản lắp ráp. Điều này có nghĩa là phiên bản tệp sẽ tự động cập nhật mỗi lần bạn xây dựng nó, do đó bạn chỉ phải cập nhật phiên bản trình cài đặt để nhận tệp bị ghi đè như bạn mong đợi.

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