gpt4 book ai didi

macos - 请求用户访问 `root` 以更新 `/etc/paths.d`

转载 作者:行者123 更新时间:2023-12-03 14:37:33 27 4
gpt4 key购买 nike

我的应用安装程序使用标准的打开 DMG,拖到“应用程序”进行安装,但我想更新 $PATH所以我的应用程序可以从命令行使用。
我认为正确的方法是在我的应用程序第一次运行时调用一个脚本来创建一个文件 myapp/etc/paths.d带有文字 /Applications/myapp/bin后跟换行符(ascii 13):

rm /etc/paths.d/myapp
echo "/Applications/myapp/bin" > /etc/paths.d/myapp
目前我遇到了错误;
rm: /etc/paths.d/myapp: No such file or directory
./myapp.sh: line 2: /etc/paths.d/myapp: Permission denied
我需要触发用户输入管理员密码 的请求但我不确定如何以一种清楚地告知用户我正在对他们的系统进行哪些更改以及为什么更改的方式来做到这一点。 (我可以将其添加到手册中,但谁会阅读)
有什么建议么?
PS我需要在linux(希望相似)和Windows上做同样的事情,但如果我能对MacOS进行排序,希望我会知道从哪里开始。

最佳答案

AuthorizationExecuteWithPrivileges已弃用很长时间,但仍然存在并在 macOS 11 (Big Sur/10.16) 中工作。 STPrivilegedTask演示了如何以“安全”的方式调用该函数——也就是说,正确处理该函数可能在 future 版本的操作系统中被删除的情况。
用法是这样的(为简洁起见,省略了错误检查等)。这将在/usr/local/bin 中创建一个名为“my-app”的可执行文件的符号链接(symbolic link):

    AuthorizationRef authorizationRef;
OSStatus err;

const char* tool = "/bin/ln";
char *args[] = {
"-sf",
[[[NSBundle mainBundle] executablePath] UTF8String],
"/usr/local/bin/my-app",
nil
};

AuthorizationCreate(nil, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);

err = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, nil);

switch (err)
{
case errAuthorizationCanceled:
// user cancelled prompt
break;
case errAuthorizationSuccess:
// success
break;
default:
// an error occurred
break;
}

AuthorizationFree(authorizationRef, kAuthorizationFlagDefaults);
你如何使用它,取决于你——你可以把它放在一个菜单项(“安装命令行工具”)后面,就像 cmake 一样。如果您想在启动时安装它,我建议先提示用户(并允许他们选择“不要再问我”)。

关于macos - 请求用户访问 `root` 以更新 `/etc/paths.d`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64497710/

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