2009-01-31 42 views

Trả lời

7

Tôi không ở trên máy Mac, vì vậy có thể có cách tốt hơn để thực hiện việc này, nhưng cách tiếp cận đầu tiên mà bạn nghĩ đến là chỉ thực hiện lệnh shell để truy vấn phiên bản hệ điều hành.

http://developer.apple.com/technotes/tn2002/tn2065.html#TNTAG2

http://developer.apple.com/DOCUMENTATION/Darwin/Reference/ManPages/man1/sw_vers.1.html

Dựa trên những tài liệu tham khảo, có thể bạn muốn làm điều gì đó như:

set os_version to do shell script "sw_vers -productVersion" 
+0

này hoạt động thực sự tốt. –

+0

Nevermind, tôi thấy sự khác biệt bây giờ, bah! Tôi đổ lỗi cho việc mệt mỏi: P – HappyCodeMonkey

2

Tôi không quá quen thuộc với AppleScript, nhưng AFAIK bạn có thể nhận được một số thông tin về các phiên bản từ vỏ với lệnh sw_vers. Ví dụ:

Macintosh:~ udekel$ sw_vers 
ProductName: Mac OS X 
ProductVersion: 10.5.6 
BuildVersion: 9G55 

Nếu bạn có thể đọc và phân tích cú pháp đó từ appleScript, đó có thể là giải pháp, mặc dù tôi chắc chắn có điều gì đó thanh lịch hơn.

0

Hãy thử một cái gì đó dọc theo những dòng:

tell application "Terminal" 
activate 

set theVersion to do script with command "sw_vers -productVersion" 
end tell 

Edit: Nó đã được chỉ ra rằng điều này không o bút thiết bị đầu cuối, và đó có lẽ không phải là hành vi mà bạn muốn.

+3

Nếu Terminal không hoạt động thì sao? Điều này sẽ khởi chạy nó, khiến hầu hết người dùng phải lo sợ. –

+1

Đó là sự thật, tuy nhiên, tôi đã giả định áp phích sẽ sửa đổi mã này để phù hợp với nhu cầu của họ. – HappyCodeMonkey

4

Bạn có thể lấy phiên bản từ ứng dụng Finder cũng

tell application "Finder" 
    set os_version to version 
end tell 

display dialog os_version 

Trên máy tính của tôi này sẽ hiển thị "10.5.8".

+0

Điều này trả về phiên bản Finder không phải là Phiên bản hệ điều hành. Trong trường hợp của tôi (6 năm sau = P) Phiên bản Finder là 10.10.4 trong khi phiên bản os là 10.10.3. –

16

Sau đây là cách để có được phiên bản OSX trong AppleScript, sử dụng các hàm built-in:

 
set sysinfo to system info 
set osver to system version of sysinfo 

Trên OS X Mavericks kết quả là "10,9".

One-liner: set osver to system version of (system info)

+0

Điều này có vẻ là cách "chính xác nhất", vì nó hoàn toàn dựa trên các hàm dựng sẵn –

+0

Bất kỳ ý tưởng nào về cách thực hiện điều này trong JXA (JavaScript cho Tự động hóa)? Dường như không có và đối tượng SystemInfo. –

12

Bạn có thể nhận được phiên bản hệ điều hành như là một chuỗi hiển thị bằng:

set _versionString to system version of (system info) 

Nếu bạn muốn so sánh này đến phiên bản khác, hãy chắc chắn để sử dụng considering numeric strings:

considering numeric strings 
    set _newEnough to _versionString ≥ "10.9" 
end considering 

Nếu không, bạn có thể gặp sự cố như "10.4.11" nhỏ hơn "10.4.9" hoặc "10.10" nhỏ hơn "10.9".

Bạn cũng có thể sử dụng system attribute.Điều này cho phép bạn nhận được số phiên bản như một số nguyên do đó bạn không cần phải lo lắng về việc so sánh dot-tách chuỗi:

set _versionInteger to system attribute "sysv" -- 4240 == 0x1090 (Mac OS X 10.9) 
set _isMavericksOrBetter to (system attribute "sysv") ≥ 4240 -- 0x1090 
set _isMountainLionOrBetter to (system attribute "sysv") ≥ 4224 -- 0x1080 
set _isLionOrBetter to (system attribute "sysv") ≥ 4208 -- 0x1070 

Bạn cũng có thể sử dụng system attribute để có được các thành phần phiên bản cá nhân mà không cần phải phân tích một chuỗi :

set _major to system attribute "sys1" -- 10 
set _minor to system attribute "sys2" -- 9 
set _bugFix to system attribute "sys3" -- 0 
1

Xin lỗi vì đã đến muộn, nhưng tôi đã cố gắng giải quyết vấn đề này ngay hôm nay.

Có vẻ như thuộc tính hệ thống "sysv" vẫn được đặt thành 4240 trong 10.10.0 Yosemite. Khi tôi nhận được nó trong 10.9.5 tôi nhận được 4245. Tôi giả định nó phải là một số giá trị cao hơn 4240 trong Yosemite?

0

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

set OSVersion to system version (system info) 
 
if OSVersion as string < "10.9" or OSVersion as string > "10.9.5" then 
 
- Add code to execute if condition met 
 
else 
 
- Add code to execute if condition not met 
 
end if

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