2009-01-29 38 views
58

Tôi có tập lệnh để thực hiện cài đặt theo kịch bản. Bạn có thể sử dụng các tập lệnh trên bất kỳ máy chủ nào của máy chủ 2008. Tuy nhiên, tôi cần kiểm tra xem .NET 3.5 đã được cài đặt chưa (trước khi tập lệnh chạy) bằng cách sử dụng tập tin batch dos. Điều đó có thể không?Có lệnh dòng lệnh để xác minh phiên bản .NET nào đã được cài đặt không.

Tôi biết tôi có thể kiểm tra xem một tệp trong số C:\WINDOWS\Microsoft.NET\Framework\v3.5 có tồn tại hay không, nhưng sẽ tốt hơn nếu có một thứ đáng tin cậy hơn một chút.

Tôi muốn kiểm tra xem nó có thực sự được cài đặt hay không, không chỉ khi thư mục/tệp tồn tại.

Cảm ơn

Trả lời

13

Thật không may là cách tốt nhất là kiểm tra thư mục đó. Tôi không chắc chắn những gì bạn có nghĩa là, nhưng "thực sự cài đặt" như NET 3.5. NET sử dụng cùng một CLR như .NET 3.0 và .NET 2.0 vì vậy tất cả các chức năng mới được bao bọc trong hội đồng mới sống trong thư mục đó. Về cơ bản, nếu thư mục ở đó thì 3.5 được cài đặt.

Chỉ có điều tôi muốn nói thêm là để tìm dir theo cách này cho sự linh hoạt tối đa:

%windir%\Microsoft.NET\Framework\v3.5 
+4

Cảm ơn sự giúp đỡ. Tôi nghĩ rằng việc kiểm tra thư mục sẽ hoạt động tốt. Ngoài ra, cảm ơn lời nhắc về việc sử dụng% windir% –

+5

Kiểm tra thư mục đơn giản này không còn giữ được tốt để phát hiện phiên bản nữa. Không có thư mục v4.5 cho .NET Framework 4.5 -http: //stackoverflow.com/questions/12070518/where-is-the-net-framework-4-5-directory – mvark

+0

Kiểm tra bài viết MSDN này: [Cách thực hiện : Xác định phiên bản .NET Framework nào được cài đặt] (https://msdn.microsoft.com/en-us/library/hh925568 (v = vs.110) .aspx # net_d). Nó giải thích rằng bạn không còn có thể dựa vào thư mục nữa. Đối với các phiên bản> = 4.0, bạn cần phân tích sổ đăng ký. – Matt

5

Bạn có thể viết cho mình một giao diện điều khiển ứng dụng nhỏ và sử dụng System.Environment.Version để tìm hiểu các phiên bản. Scott Hanselman đưa ra một số blog post về điều đó.

Hoặc tìm trong sổ đăng ký cho các phiên bản đã cài đặt. HKLM \ Software \ Microsoft \ NETFramework Setup \ NDP

+1

Gotta thích nó - blog của Hanselman có một widget hiển thị "Bây giờ chơi: Alicia Keys - Nếu tôi là người phụ nữ của bạn/Walk On By" liên kết với các cửa hàng iTunes. : D – dkretz

+0

Chỉ có vấn đề là tập lệnh của tôi có thể chạy trên vm mới được cài đặt mà không có gì ngoài hệ điều hành cơ sở. Tôi nghĩ rằng kiểm tra cho các dir tồn tại sẽ làm việc cho những gì tôi cần. –

+0

Nếu bạn quan tâm đến SP1 so với non SP1, bạn sẽ phải sử dụng một cái gì đó khác, như kiểm tra sổ đăng ký. – ajma

4

Nếu bạn định chạy một ứng dụng giao diện điều khiển nhỏ, bạn cũng có thể cài đặt clrver.exe từ .NET SDK. Tôi không nghĩ rằng bạn có thể nhận được sạch hơn thế. Đây không phải là câu trả lời của tôi (nhưng tôi tình cờ đồng ý), tôi tìm thấy nó here.

16

Bạn có nghĩa là một lệnh DOS như dưới đây sẽ thực hiện công việc hiển thị khung NET cài đặt:

wmic /namespace:\\root\cimv2 path win32_product where "name like '%%.NET%%'" get version 

Sau đây thì có thể được hiển thị:

Version 
4.0.30319 

WMIC là khá hữu ích khi bạn chủ sử dụng nó, dễ dàng hơn nhiều so với mã hóa WMI trong các kịch bản tùy thuộc vào những gì bạn muốn đạt được.

+2

Tôi đã thử lệnh này, nguyên văn, nhưng nó chỉ treo ở đó và đóng băng và không trả lời –

+0

Aviad, có cùng ở đây. Bạn chỉ phải chờ đợi. Phải mất 3 phút! –

+0

Wow 3 phút? Đó là lâu? Máy ảo của tôi đã làm nó trong khoảng 10 giây. Có cách nào để hạn chế nó để cài đặt phiên bản mới nhất và hiển thị đường dẫn đến vị trí trên ổ đĩa không? – thefoyer

69

Vì bạn đã nói bạn muốn biết nếu nó thực sự được cài đặt, tôi nghĩ cách tốt nhất (viết tắt của mã phiên bản cụ thể), là kiểm tra tên đăng ký "Cài đặt" được đảm bảo. 0x1 có nghĩa là:

C:\>reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5"| findstr Install 

    Install  REG_DWORD  0x1 
    InstallPath REG_SZ c:\WINNT\Microsoft.NET\Framework\v3.5\ 

Điều này cũng xảy ra là "Microsoft được khuyến nghị" official method.

WMI là một khả năng khác, nhưng có vẻ không thực tế (Chậm? Mất 2 phút trên C2D, SSD của tôi). Có thể nó hoạt động tốt hơn trên máy chủ của bạn:

C:\>wmic product where "Name like 'Microsoft .Net%'" get Name, Version 

Name            Version 
Microsoft .NET Compact Framework 1.0 SP3 Developer 1.0.4292 
Microsoft .NET Framework 3.0 Service Pack 2   3.2.30729 
Microsoft .NET Framework 3.5 SP1     3.5.30729 
Microsoft .NET Compact Framework 2.0    2.0.5238 
Microsoft .NET Framework 4 Client Profile   4.0.30319 
Microsoft .NET Framework 4 Multi-Targeting Pack  4.0.30319 
Microsoft .NET Framework 2.0 Service Pack 2   2.2.30729 
Microsoft .NET Framework 1.1      1.1.4322 
Microsoft .NET Framework 4 Extended     4.0.30319 

C:\>wmic product where "name like 'Microsoft .N%' and version='3.5.30729'" get name 

Name 
Microsoft .NET Framework 3.5 SP1 

Khác với cách này, tôi nghĩ cách duy nhất để chắc chắn 100% là chạy ứng dụng giao diện điều khiển đơn giản được biên dịch nhắm mục tiêu phiên bản khung của bạn. Cá nhân, tôi xem xét điều này không cần thiết và tin tưởng các phương pháp đăng ký tốt.

Cuối cùng, bạn có thể thiết lập trang web thử nghiệm mạng nội bộ có thể truy cập từ máy chủ của bạn và đánh dấu Tác nhân người dùng để xác định phiên bản .NET. Nhưng đó không phải là một giải pháp tập tin thực thi.Xem thêm doc here.

+2

Phương pháp này không hiển thị tất cả các phiên bản Khuôn khổ .NET từ GAC. Chỉ có 4.0 trong trường hợp của tôi: * Microsoft .NET Framework 4 Gói nhắm mục tiêu đa 4.0.30319 *, * Microsoft .NET Framework 4 Mở rộng 4.0.30320 *, * Microsoft .NET Framework 4 Hồ sơ khách hàng 4.0.30320 *. Mặc dù phiên bản 2.0.50727, 3.0.30729.5420, 3.5.30729.5420 cũng được cài đặt. – Mosc

+0

Còn .NET 4.5 thì sao? – Kiquenet

+1

Tôi sử dụng này cho 4.5: reg truy vấn "HKLM \ SOFTWARE \ Microsoft \ NET Framework Thiết lập \ NDP \ v4 \ Full" | findstr Version –

0

REM Tìm kiếm các tập tin cấu hình, nếu điều này không thoát ra sau đó người dùng không có .Net framework 2.0 '

SET FileName=%windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG 
IF EXIST %FileName% GOTO INSTALL_DIALER 
ECHO.You currently do not have the Microsoft(c) .NET Framework 2.0 installed. 
0

này đang làm việc cho tôi:

@echo off 
SETLOCAL ENABLEEXTENSIONS 

echo Verify .Net Framework Version 

for /f "delims=" %%I in ('dir /B /A:D %windir%\Microsoft.NET\Framework') do (
    for /f "usebackq tokens=1,3 delims= " %%A in (`reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\%%I" 2^>nul ^| findstr Install`) do (
     if %%A==Install (
      if %%B==0x1 (
       echo %%I 
      ) 
     ) 
    ) 
) 

echo Do you see version v4.5.2 or greater in the list? 

pause 

ENDLOCAL 

Các 2^>nul chuyển hướng lỗi đến hơi.

+2

MS đã không dùng thư mục đăng ký 'v4.0' có lợi cho thư mục 'v4' với số bản phát hành trong đó, như 393297 = 4.6. https://msdn.microsoft.com/en-us/library/hh925568(v=vs.110).aspx#net_b – Aaron

-2

bạn có thể có một cái nhìn trang này cho .NET 4: http://www.itninja.com/question/batch-script-to-check-and-install-dotnet4-0

+0

[Chỉ liên kết câu trả lời không được khuyến khích] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contains-links-ở những nơi khác-thực sự-tốt-câu trả lời). Vui lòng cung cấp ít nhất một bản tóm tắt thông tin được cung cấp trong liên kết. –

0

bạn có thể kiểm tra cài đặt C# trình biên dịch và phiên bản in của .net:

@echo off 

for /r "%SystemRoot%\Microsoft.NET\Framework\" %%# in ("*csc.exe") do (
    set "l=" 
    for /f "skip=1 tokens=2 delims=k" %%$ in ('"%%# #"') do (
     if not defined l (
      echo Installed: %%$ 
      set l=%%$ 
     ) 
    ) 
) 

echo latest installed .NET %l% 

các csc.exe không có một chuyển đổi -version nhưng nó in phiên bản .net trong biểu trưng của nó. Bạn cũng có thể thử với msbuild.exe nhưng .net framework 1. * không có msbuild.

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