2009-02-27 43 views
9

Gần đây tôi đã yêu cầu if you can detect from the application if .NET is installed (do đó ứng dụng sẽ không gặp sự cố với lỗi ngoại lệ chung).Làm thế nào để thất bại một cách duyên dáng nếu .NET không được cài đặt?

Câu trả lời có vẻ là "không" đơn giản. Tôi vẫn muốn có thể thoát ra một cách duyên dáng nếu .NET không được cài đặt, có cách nào để thực hiện điều này không?

Hãy nhớ rằng tôi không muốn thay đổi tên thực thi, có nghĩa là bạn có thể thực thi không được quản lý bằng séc và dll thực hiện chương trình .NET thực sự nhưng không phải thực thi.

Chỉnh sửa: Tôi không có nghĩa là thất bại trong trình cài đặt, không có trình cài đặt nào cả, chỉ là tệp thực thi. Tất nhiên nó rất khó cho điều này xảy ra nhưng tôi vẫn muốn có thể kiểm tra nó anyway.

+4

Tại sao không sử dụng trình cài đặt? Sau đó, vấn đề này biến mất. –

Trả lời

3

Bạn có hai lựa chọn khác nhau:

  • Viết một bộ nạp mã gốc nhỏ để kiểm tra cho bộ thực thi và thực thi phần mềm của bạn nếu thời gian chạy được cài đặt. Nếu không nó chỉ có thể cung cấp cho người dùng một thông báo lỗi, chỉ ông đến vị trí tải cho thời gian chạy vv

HOẶC

  • Hãy chắc chắn rằng cài đặt của bạn cài đặt thời gian chạy. Joe Coehorn đã đề cập rằng sẽ dễ dàng thực hiện với MSI trong this post và bạn cũng có thể làm điều đó với những người cài đặt khác như InnoSetup. Tất nhiên nếu ai đó cài đặt phần mềm của bạn lần đầu tiên, sau đó cài đặt lại cửa sổ và sau đó cố gắng chạy ứng dụng của bạn mà không cần cài đặt lại, nó sẽ bị lỗi.

Và tất nhiên bạn có thể kết hợp cả hai điều tốt nhất cho cả hai thế giới.

-2

Chỉ cần trình bày một Hộp thư đẹp mà nó chưa được cài đặt và đề nghị tải xuống. Hầu hết các trình cài đặt sẽ cho phép bạn thực hiện việc này.

+0

Vâng, nhưng làm thế nào để làm điều đó mà không có khuôn khổ .NET ở nơi đầu tiên? –

+1

Nếu bạn tạo một trình cài đặt bằng cách sử dụng VS200 *, nó sẽ làm điều đó cho bạn. –

0

Bạn có thể viết một ứng dụng gốc sẽ kiểm tra .Net tồn tại. Sau đó, bạn sẽ cần phải tải dll được quản lý bằng cách sử dụng LoadLibrary và gọi một hàm bên trong nó (GetProcAddress) sẽ bắt đầu ứng dụng .Net của bạn.

Tôi đoán bạn cũng sẽ cần phải gây rối với tệp .Net để làm cho chức năng chính của bạn hiển thị và có thể gọi từ mã không được quản lý. Nó được gọi là nghịch đảo PInvoke.

http://www.autohotkey.com/forum/topic20273.html

0

Những gì bạn có thể làm là viết mã phát hiện NET của bạn trong Win32 C/C++, nó phát hiện, hiển thị một số người dùng thông báo lỗi thân thiện hoặc bất cứ điều gì bạn có nghĩa là bằng cách rơi xuống một cách duyên dáng hoặc gọi .NET dll nếu có một khung thích hợp có sẵn. Nếu bạn không muốn có hai tệp thực thi, chỉ cần lưu trữ các byte của dll trong tệp thực thi gốc của bạn và tải nó theo cách động.

Lưu ý rằng cách tiếp cận này làm cho nó hoàn toàn không thể chạy ứng dụng của bạn với Mono.

+0

Tại sao nó không thể chạy ứng dụng với Mono? Anh ấy không thể viết trình tải mã gốc cho các nền tảng khác và Mono? –

+0

À, anh ta có thể đoán được ... –

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