2009-10-16 32 views
41

Tôi đã tạo ứng dụng .NET C# WinForms trên Win 7 RTM x64, giả sử tôi đã gọi là DataInstaller.Trợ lý tương thích chương trình cho rằng ứng dụng của tôi là trình cài đặt

Khi tôi chạy chương trình này bên ngoài trình gỡ rối (chỉ là một biểu mẫu trống không có chức năng tại thời điểm này), nó hoạt động tốt cho đến khi tôi đóng biểu mẫu. sau đó tôi nhận được một tin nhắn từ Program Compatibility Assistant nói rằng:

Chương trình này có thể không được cài đặt đúng

Sau đó tôi nhận được tùy chọn để cài đặt lại sử dụng cài đặt được đề nghị hay để nói rằng tiến trình cài đặt đã làm việc như mong đợi.

Nếu tôi đặt tên ứng dụng 'DataThingy' đây không phải là vấn đề, tôi đoán điều này liên quan đến cách chương trình được gọi * Thiết lập có biểu tượng lá chắn UAC.

Tôi cho rằng sẽ có một thứ đơn giản mà tôi có thể đặt trong tệp kê khai ứng dụng để ngăn chặn điều này?

Tôi không chắc chắn nếu điều này xảy ra trên Vista vì hiện tại tôi không có quyền truy cập.

Thay đổi tên không phải là một tùy chọn và tắt UAC không phải là một tùy chọn vì vậy, vui lòng không đề xuất điều này!

Chỉnh sửa:

OMG.

Dường như nếu bất cứ điều nào sau đây là đúng sự thật, UAC gậy chèo của nó trong:

tên Exe chứa từ Installer

AssemblyInfo.cs

AssemblyTitle contains the word 'Installer' 
    e.g. [assembly: AssemblyTitle("DataInstaller")] 
AssemblyProduct contains the word 'Installer' 
    e.g. [assembly: AssemblyProduct("Data Installation Utility")] 

'Installer' cũng có thể Được thiết lập'.

Nó ăn xin niềm tin, nó thực sự. Rõ ràng là một trong những lập trình viên VB6 cũ đã được chuyển đến đội UAC tại Redmond.

Tôi vẫn cần giải pháp, tôi không sẵn sàng chấp nhận rằng ứng dụng của tôi không thể được gọi là trình cài đặt vì nó không chạm vào sổ đăng ký hoặc đặt bất kỳ tệp nào trong thư mục Tệp Chương trình.

Tôi giả định rằng UAC sẽ đặt máy vào tổng số khóa nếu tôi cố gắng thực thi ứng dụng của tôi có tên là IAmAVirus.exe. (Thực ra, tôi không thử vì tôi không hoàn toàn tin rằng tôi chỉ ngớ ngẩn)

+3

Thực ra, Windows chỉ kiểm tra tên tệp cho các từ như "thiết lập" hoặc "cài đặt" để xác định xem có cái gì đó là trình cài đặt hay không. Vâng, nó câm ... Có thể làm gì đó được không? Tôi tự hỏi ... Tốt Q, mặc dù. –

+0

Tôi hy vọng như vậy, bởi vì đó là tất cả một chút quá 'ma thuật stringy' cho ý thích của tôi .. cảm ơn cho phiếu bầu! – Carl

+2

@Wim - Không, có vẻ như AssemblyTitle giống như bài đăng gợi ý. Xác minh trên máy Win7 SP1 của tôi cho PackageInstaller.exe - không có vấn đề nếu tiêu đề lắp ráp là PackageNstaller –

Trả lời

41

Thêm thông tin này vào tệp kê khai của bạn.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
    <!--The ID below indicates application support for Windows Vista --> 
    <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
    <!--The ID below indicates application support for Windows 7 --> 
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> 
    <!--The ID below indicates app support for Windows 8 --> 
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> 
    <!--The ID below indicates app support for Windows 8.1 --> 
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> 
    </application> 
</compatibility> 

Các GUID cho tất cả các hệ điều hành trong ví dụ trước hỗ trợ xuống cấp. Các ứng dụng hỗ trợ nhiều nền tảng không cần tệp kê khai riêng cho từng nền tảng.

Lấy từ App (executable) manifest.

+0

Làm việc như một sự quyến rũ, ngay cả khi được triển khai tới ProgramFiles! Cảm ơn Justin. – Carl

+1

Điều này không tạo ra bất kỳ sự khác biệt nào khi tôi thử ... công cụ của tôi được gọi là "ccsetup" vì nó thay thế công cụ cài đặt gốc bằng tên đó, nhưng miễn là tên hoặc thông tin phiên bản có từ "setup" trong nó, rác tương thích tiếp tục xuất hiện. Khi tôi gỡ bỏ nó, vấn đề ngay lập tức biến mất, nhưng tôi không muốn nó có một cái tên khác. – Nyerguds

+4

{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} dành cho Windows 8. Đọc thêm: http://msdn.microsoft.com/en-us/library/windows/desktop/hh848036(v=vs.85).aspx – mjb

3

Giống như Workshop Alex sẽ đoán dựa trên tên tập tin.

Nhưng bạn đã cố gắng thêm tệp kê khai chưa? Điều đó cho phép bạn tiết lộ quyền truy cập nào bạn cần để chạy ứng dụng.

MSDN on how to create one from Visual studio Bài viết liên kết khác help.

+1

Chỉ cần thêm các biểu hiện đã làm các trick (mặc dù tôi đã cố gắng mà trước khi gửi bài này, trung thực!). Để biết thêm thông tin, hãy xem: http://blogs.msdn.com/cjacks/archive/2009/06/18/pca-changes-for-windows-7-how-to-tell-us-you-are -not-an-installer-take-2-bởi vì chúng tôi đã thay đổi-quy tắc-on-you.aspx và http://technet.microsoft.com/en-us/library/dd638326%28WS.10%29 .aspx. Cảm ơn. – Carl

+0

Là bản cập nhật, không, tính năng này không hoạt động. Ngay sau khi exe được triển khai tới một vị trí khác, chẳng hạn như , PCA lại phát ra đầu xấu xí của nó một lần nữa. – Carl

+1

Câu hỏi cũ nhưng tên tệp là những gì đã làm cho tôi. Thay đổi trình cài đặt thành công cụ và nó hoạt động tốt. Cảm ơn bạn đã tip @EKS – DTown

2

Tôi vừa gặp sự cố này và kết thúc việc sửa lỗi bằng cách đảm bảo tiêu đề lắp ráp trong tệp AssemblyInfo.cs và tên lắp ráp của tệp cs.proj của tôi khớp với nhau. Khi chúng không được đồng bộ hóa, nó đã ném lỗi này, khiến chúng giống nhau khiến nó biến mất. Không chắc chắn nếu nó áp dụng cho tình huống của bạn, nhưng cùng một trường hợp tương tự như trường hợp, có thể có giá trị một thử và tránh được chấp nhận câu trả lời của bỏ qua các lỗi tất cả cùng nhau.

+0

Đó chính là vấn đề tôi đang gặp phải. Cảm ơn vì đã chỉ ra người đàn ông, mặc dù câu hỏi đã được trả lời. Tôi đã nghĩ rằng nó đã được cài đặt manifest nhưng tôi đã thay đổi 'Assembly name' trong thuộc tính dự án và nó không phù hợp với' Default namespace'. – strider

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