2012-12-09 42 views
5

Tôi đã cài đặt bản cập nhật VS 2012 Professional và XP. Tôi đã xây dựng dự án của mình với v110_xp làm bộ công cụ nền tảng trên VS 2012. Gói .msi của dự án của tôi đang cài đặt tốt trên Win 7 nhưng không thành công trên Win XP SP3. Lỗi được báo cáo trên XP SP3 là -VS 2012 - XP Số phát hành

"Điểm nhập thủ tục FlushProcessWriteBuffers không thể là nằm trong thư viện liên kết động Kernel32.dll".

Trong khi cùng một dự án được xây dựng từ VS 2005 đang cài đặt tốt trên XP SP3. Tôi không chắc chắn những gì đang xảy ra VS 2012. _WIN32_WINNT được đặt thành 0x0501. Có thể một số xin vui lòng hướng dẫn làm thế nào để giải quyết vấn đề?

Bất kỳ trợ giúp nào được đánh giá cao,

Mahesh.

+0

Theo MSDN, chức năng đó là Vista +. – chris

+0

@chris Tôi thấy điều đó. Nhưng làm thế nào đến nó đã làm việc tốt khi gói được xây dựng trên VS 2005 là những gì tôi không hiểu tại thời điểm này. – Mahesh

+0

Bởi vì thời gian chạy VS2005 không cố gắng liên kết với chức năng đó. Nhưng thời gian chạy VS2012 mà bạn triển khai thực hiện. –

Trả lời

13

Có, Thời gian chạy C có phụ thuộc vào FlushProcessWriteBuffers(). Phiên bản cập nhật của msvcrt110.dll và libcmtl.lib, những cái bạn đã nhận được cùng với bản cập nhật, không còn liên kết trực tiếp với hàm nữa, chúng sử dụng GetProcAddress() để tìm nó và khập khiễng dọc theo nếu nó là missng. Vì vậy, bạn sẽ không bao giờ nhận được lỗi này.

Vì vậy, tỷ lệ cược rất cao mà bạn đã triển khai phiên bản sai của msvcrt110.dll, một phiên bản cũ thay vì phiên bản cập nhật. Bạn có thể tìm lại trong c: \ windows \ system32, xem các thuộc tính. Mine là phiên bản 11.00.51106.1, ngày 11/5/2012. Một trình cài đặt riêng biệt có sẵn cho nó here.

+0

Bạn chính xác. Tôi đóng gói các dlls sai. Dự án của tôi đang xây dựng và đặt các dll chính xác để đóng gói. Hãy để bạn biết làm thế nào nó đi. Hy vọng nó thành công trên XP :) – Mahesh

+0

Vâng, đó là một số khác đã được cập nhật. –

+0

Xin lỗi, không hiểu. Bạn có thể vui lòng xây dựng? – Mahesh

3

Thời gian chạy VS2012 mà bạn đang cài đặt sử dụng các hàm không có sẵn trong XP. Xem bài viết MS này: Targeting Windows XP with C++ in Visual Studio 2012 giải thích thêm và cung cấp một số giải pháp.

Update 1 cho VS2012 giải quyết sự cố.

Nhưng bản cập nhật 1 không chỉ là về nền tảng Windows mới. Nó cũng cho phép bạn nhắm mục tiêu Windows XP với các ứng dụng gốc C++ trong Visual Studio 2012.

Nếu bạn đang xây dựng với bản cập nhật 1 và vẫn gặp phải sự cố thì tôi nghi ngờ bạn đang cài đặt thời gian chạy lỗi thời. Bạn cần triển khai thời gian chạy được phân phối với bản cập nhật 1.

+1

Đã có một bản cập nhật. Bây giờ có một trình biên dịch cho nó. http://www.microsoft.com/visualstudio/eng/visual-studio-update#story-update-1 – chris

+0

@David Bạn đã cho tôi một gợi ý. Những gì tôi đã đóng gói C, C++ runtimes trong .msi của tôi không phải là những cái mới nhất được hỗ trợ cho XP.Hãy để tôi xem nó như thế nào sau khi có các thời gian chạy C, C++ được hỗ trợ. Nhưng dù sao thì chức năng này được tìm trong Kernel32.dll và không phải trong thời gian chạy C, C++. Tôi sẽ thử một cách nào đó. – Mahesh

+0

@Mahesh Đoạn cuối cùng của tôi nói giống như những gì bạn vừa nói. Thời gian chạy C mà bạn đang triển khai đang tìm kiếm một hàm Windows API không tồn tại trong XP. Hàm API đó sống trong kernel32, nhưng chỉ trong Vista và lên. Vì vậy, đó là thời gian chạy cố gắng để tải một chức năng trong kernel32 mà không tồn tại trên XP. Vấn đề là trong thời gian chạy. Thực tế là thông báo lỗi đề cập đến kernel32 không có nghĩa là vấn đề nằm trong kernel32. –

0

Bạn có thể giải quyết điều này bằng cách bao gồm các mô-đun kết hợp VC11 từ máy phát triển của bạn (tệp chương trình \ tệp phổ biến \ mô-đun hợp nhất) trong trình cài đặt của bạn. Nó dễ dàng hơn việc phải chạy exe redist trong trình cài đặt của bạn.

Nếu bạn sử dụng WIX: merge module addition

tôi đã thử nghiệm trên máy chủ 03, XP64 và xp32.