gpt4 book ai didi

xcode - Swift 中 NSTask 的根权限

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:58 26 4
gpt4 key购买 nike

我在网上搜索了很多,想找到一种在我的 NSTask 中获得 root 权限的简单方法,但我只找到了用 Objective-C 编写的旧文章。但是我的 Xcode 项目是用 Swift 编写的:x 有没有办法解决这个问题以运行具有 Root 权限的 NSTask? :) 我知道我必须使用 AppleScript、STPrivilegedTask 或 Apple 的 BetterAuthorizationSample 之类的东西,但我发现的都是用 Objective-C 编写的...

我的想法是创建一个应用程序,使存储介质可以使用命令 createinstallmedia 启动:p 一切正常,唯一的问题是该命令需要 root 权限,为了测试,我只需打开我的终端并以 Root 身份登录,但这不是解决此问题的最佳方法 :D 所以请帮助我! :o

我的代码唯一遗漏的是获得 root 访问权限的代码:

import Cocoa


class ViewController: NSViewController {

var Task = NSTask()
var openPanel = NSOpenPanel()

var workingpath_createinstallmedia : String!
var workingpath_medium : String!
var workingpath_application : String!

var volume_flag = "--volume"
var applicationpath_flag = "--applicationpath"
var nointeraction_flag = "--nointeraction"

var commandpath : String!
var postcommand : [String]!

var DirectoryOS : NSURL!
var DirectoryMedium : NSURL!

@IBOutlet weak var PathControlOS: NSPathControl!

@IBOutlet weak var PathControlMedium: NSPathControl!

@IBOutlet weak var Outputlabel: NSTextField!

@IBAction func OSauswählen(sender: AnyObject) {

openPanel.canChooseDirectories = false
openPanel.canChooseFiles = true
openPanel.canCreateDirectories = false
openPanel.allowsMultipleSelection = false

if openPanel.runModal() == NSModalResponseOK {

DirectoryOS = openPanel.URLs[0] as NSURL
PathControlOS.objectValue = DirectoryOS

}
}

@IBAction func Mediumauswählen(sender: AnyObject) {

openPanel.canChooseDirectories = true
openPanel.canChooseFiles = false
openPanel.canCreateDirectories = false
openPanel.allowsMultipleSelection = false

if openPanel.runModal() == NSModalResponseOK {

DirectoryMedium = openPanel.URLs[0] as NSURL
PathControlMedium.objectValue = DirectoryMedium


}
}

@IBAction func starttask(sender: AnyObject) {

// edit Strings

// Createinstallmedia

workingpath_createinstallmedia = String(DirectoryOS)
workingpath_createinstallmedia = workingpath_createinstallmedia.stringByReplacingOccurrencesOfString("file://", withString: "")
workingpath_application = workingpath_createinstallmedia.stringByReplacingOccurrencesOfString("%20", withString: " ")
workingpath_createinstallmedia = workingpath_application + "/Contents/Resources/createinstallmedia"

// Medium

workingpath_medium = String(DirectoryMedium)
workingpath_medium = workingpath_medium.stringByReplacingOccurrencesOfString("file://", withString: "")
workingpath_medium = workingpath_medium.stringByReplacingOccurrencesOfString("%20", withString: " ")

// config Task Parameters

commandpath = workingpath_createinstallmedia
postcommand = [volume_flag,workingpath_medium,applicationpath_flag,workingpath_application,nointeraction_flag]

// commit the Parameters to the Task

Task.launchPath = commandpath
Task.arguments = postcommand

// start Task

Task.launch()
Task.waitUntilExit()

}
}

感谢您的帮助!!!

最佳答案

我解决了在命令中使用 sudo 并要求用户输入密码以直接提供给 sudo 的问题,方法如下:

echo "passwordhere" | sudo -S command --arguments

并使用 sh shell 可执行文件来运行该过程,使用这种方法我成功创建了一个应用程序来创建名为 TINU 的可启动 mac os 安装媒体,但是在处理用户密码时需要小心,我选择制作我的应用程序开源,让其他人知道它对这种需要用户密码的任务做了什么,但在 Mac OS 上,你应该创建专门的程序来执行这种特权任务,然后使用将为你管理身份验证的系统 api 启动它们并让专门的程序来完成他的工作。

关于xcode - Swift 中 NSTask 的根权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35507462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com