Я хотел бы знать, есть ли способ из приложения Cocoa узнать, имеет ли пользователь «установить дату & времени автоматически», установленную в его Системных настройках. Если это так, я также хотел бы узнать время последнего обновления часов. Большое спасибо за любую помощь, которую вы можете предоставить.Cocoa: есть ли способ узнать, установил ли пользователь «Установить дату и время автоматически» в системных настройках?
ответ
Вы можете попробовать использовать STPrivilegedTask (или аналогичный) для запуска задачи с правами root, а затем проанализировать результат. Hack-y/не лучший, но он должен работать.
Edit:
- (BOOL)networkTimeEnabled {
STPrivilegedTask *task = [[STPrivilegedTask alloc] initWithLaunchPath:@"/usr/bin/sudo" arguments:@[@"/usr/sbin/systemsetup",@"-getusingnetworktime"]];
if ([task launch] == noErr) {
NSData *data = [task.outputFileHandle readDataToEndOfFile];
[task waitUntilExit];
NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSString *status = [result componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet][2];
return ([status isEqualToString:@"On"]);
}
return NO;
}
Большое спасибо Seb за ваш ответ ... к сожалению, я пробовал именно это, но systemetup продолжает терпеть неудачу под STPrivilegedTask, так как его нужно выполнять от root, а не от администратора. Я проверил это, разобрав систему. Я также исправил его в своем корневом чеке, но распространение моего приложения с помощью несанкционированного системного набора, запущенного внутри него, будет за пределами любого правила хорошего дизайна. Еще раз спасибо. Еще одно предлагаемое решение - поиск запущенных процессов ntpd, принадлежащих root. Если он есть, вы можете предположить, что сетевое время включено, но, опять же, это просто предположение. –
@AlfonsoTesauro Хмм. Честно говоря, 'systemetup' работал для меня как в терминале с' sudo', так и с помощью этого метода. Ваше предположение о запуске 'ntpd' работает корректно (проверено отключением/включением« Установить дату и время автоматически »), но, похоже, [методы для получения полного списка процессов для фактической проверки его устарели] (http : //stackoverflow.com/questions/2518160/programmatically-check-if-a-process-is-running-on-mac) .. –
По-видимому, они недавно изменили это поведение системы. Вы используете Yosemite 10.10.3? О процессах я думал о вызове ps -ax с помощью NSTask ... Я считаю, что это довольно поддерживаемый метод и можно предположить, что он существует во многих версиях Mac OS X. –
- 1. Есть ли способ узнать, играет ли пользователь в моем приложении
- 2. Есть ли способ в PostgreSQL автоматически установить время обновления записи?
- 3. Есть ли способ получить дату создания папки в Cocoa?
- 4. Есть ли способ узнать, отклонил ли пользователь апплет?
- 5. iOS: Есть ли способ узнать, отказался ли пользователь от уведомлений?
- 6. Есть ли способ узнать, понравился ли пользователь объект на facebook?
- 7. Есть ли способ узнать, отправил ли пользователь только SMS?
- 8. Есть ли способ узнать, удаляет ли пользователь WKInterfaceMap?
- 9. Есть ли способ узнать, открывает ли пользователь диалог UAC
- 10. PHP - Есть ли способ узнать, когда пользователь закрывает браузер?
- 11. Учитывая дату и время, есть ли способ узнать, какой идентификатор автоинкремента был создан в то время?
- 12. Есть ли способ сохранить дату и время в структуре? C++
- 13. Есть ли способ узнать, не нажата ли кнопка определенное время?
- 14. Есть ли способ узнать, заблокирован ли поток?
- 15. Можете ли вы узнать, какие приложения пользователь установил?
- 16. Есть ли способ узнать, завершена ли timerTask?
- 17. Есть ли способ установить дату в DatePickerFragment в Android (Xamarin)
- 18. Есть ли способ узнать, какие заголовки автоматически включаются в
- 19. Есть ли способ прочитать время и дату создания файла?
- 20. Любой способ узнать, есть ли запланированное выключение?
- 21. Есть ли способ захватить дату и время из editText
- 22. Cocoa - Есть ли способ проверить, существует ли кеш для NSURLConnection?
- 23. Есть ли способ узнать, работает ли пользователь во время использования моего приложения?
- 24. Есть ли способ автоматически установить столбец CreatedDate/LastModifiedDate в EF?
- 25. Укажите дату, когда пользователь установил расширение Chrome
- 26. Есть ли способ узнать, подписано ли событие?
- 27. Есть ли способ узнать, видна ли DataGridViewCell?
- 28. Есть ли способ определить, включена ли вибрация в настройках?
- 29. Есть ли способ узнать, обновляется ли строка?
- 30. Есть ли способ узнать, успешно ли ExecutorService?
Что вы пытаетесь сделать? – mipadi
Здравствуйте, спасибо за быстрый ответ ... Я бы хотел запретить использование моего приложения, если время в Интернете неактивно, так что я могу доверять системным часам точно. Похоже, что «systemsetup -getusingnetworktime» является официальным решением, но оно требует привилегий root, даже не запускается как администратор. Спасибо –