- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在向 Mac 程序添加一项功能,以删除其首选项 .plist 文件,然后使用有效的“出厂设置”重新启动。然而,客户对此持怀疑态度,不愿使用 Sparkle 等外部框架。我在网上查找示例代码,但其中大部分似乎过于复杂(例如,向 NSApplication 添加类别)。此外,当您无法使用某些 API 从非 GUI 进程启动 GUI 进程时,其中一些在 Lion 或更高版本中根本不起作用。
那么有没有一种简单的方法可以让 Mac GUI 应用程序自行重新启动?
最佳答案
至少对于 Mountain Lion 来说,稍微花哨的 fork/exec 版本可以正常工作:
void RelaunchCurrentApp()
{
// Get the path to the current running app executable
NSBundle* mainBundle = [NSBundle mainBundle];
NSString* executablePath = [mainBundle executablePath];
const char* execPtr = [executablePath UTF8String];
#if ATEXIT_HANDLING_NEEDED
// Get the pid of the parent process
pid_t originalParentPid = getpid();
// Fork a child process
pid_t pid = fork();
if (pid != 0) // Parent process - exit so atexit() is called
{
exit(0);
}
// Now in the child process
// Wait for the parent to die. When it does, the parent pid changes.
while (getppid() == originalParentPid)
{
usleep(250 * 1000); // Wait .25 second
}
#endif
// Do the relaunch
execl(execPtr, execPtr, NULL);
}
我遇到了一个问题,那就是重新启动的应用程序可能会在后台结束。在执行的早期这样做可以解决这个问题:
[[NSApplication sharedApplication] activateIgnoringOtherApps : YES];
关于c++ - Mac GUI 应用程序如何在不使用 Sparkle 的情况下自行重新启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15305845/
有什么理由担心通过 Mountain Lion 上的 Sparkle 框架更新应用程序(如果有)? 如果我使用开发者 ID 证书签署新版本,Sparkle 下载它并用新版本替换旧版本,是否有理由相信开
我正在使用Sparkle第一次,并且在开展工作时遇到困难。当我检查更新时,它正确检测到较新的版本,下载它,取消存档,然后给出以下错误: Update Error! An error occurred
我正在开发一个 Cocoa 应用程序,并使用 Sparkle framework用于更新。我需要检查启动时是否有新版本可用。我将 SUCheckAtStartup 键添加到 info.plist 并将
我正在做一个需要使用两个变量的Mac代理,每次用户下载代理时都需要设置这两个变量,我的第一次尝试是修改Info.plist文件并为 Sparkle 进行签名,但之后我意识到每次我修改该文件并进行签名时
我是第一次使用sparkle框架。我正在尝试对其进行测试,一切正常,只是它无法正确显示更新版本。例如,这是我在服务器上的 xml 文件: Your Great App's Chang
我在我的应用程序中使用 Sparkle,并通过运行 shell 脚本构建阶段对框架进行签名,效果很好,没有构建错误。问题是,没有通过 Sparkle 进行更新,更新程序说: an error occu
我目前正在构建一个基于 Qt C++ 框架的项目,该项目利用 Sparkle 框架进行更新。我遇到的问题是我的整个应用程序构建得很好,除非我包含了 Sparkle 框架。 Sparkle.framew
我正在使用 Sparkle从 0.9.2 更新应用程序至 1.0.0 . 在新的更新中,我更改了 CFBundleIdentifier的 MyApp.app来自 com.MyCompany.MyApp
有人可以告诉我如何在 Sparkle 中签署 mac 应用程序的更新吗? 我检查了https://github.com/sparkle-project/Sparkle/wiki/publishing-
我的应用程序使用 Cocoa Framework Sparkle 来部署更新。我通常不会部署软件的测试版,但对于下一次更新,我觉得我需要这样做。我的问题是使用 Sparkle 部署测试版的最佳编号策略
我正在使用 Java 的 Spark Web 框架和 Freemarker 模板引擎。我有这样的 html 代码: 当我想包含这些放在我的资源/公共(public)目录中的 css
一些使用 Sparkle 框架的应用程序开发人员在他们的应用程序中保留旧版本(通过使用多个 标签)。 我认为,如果 Sparkle 在自上次更新以来发生多次更新时(例如,用户从 4.0.0 版升级到
我使用 Sparkle 为我的应用程序提供更新。 该过程非常简单且基本:应用程序的更新被压缩,XML appcast 向 Sparkle 提供该 zip 的 URL。 一切都按预期进行,Sparkle
我在 Xcode 5 中使用 Sparkle 框架。当我构建时,我看到以下警告。有没有办法在不改变 Sparkle 使用 GC 的事实的情况下禁用(安静)此警告? 谢谢! 最佳答案 使用up-to-d
对于那些在 Mac App Store 之外分发 Mac 应用程序的人,您计划如何支持更新和沙箱?我猜目前大多数人的答案是否定的,但我希望最终非 MAS 应用程序可以像 MAS 应用程序一样被沙箱化。
有谁知道我将如何在我的 Swift 应用程序中进行设置?我已尝试使用 cocoa 说明进行设置,但我的应用程序在查找框架时遇到问题。似乎 Swift 不再有框架文件夹了。 我应该采取什么步骤来启动和运
我正在向 Mac 程序添加一项功能,以删除其首选项 .plist 文件,然后使用有效的“出厂设置”重新启动。然而,客户对此持怀疑态度,不愿使用 Sparkle 等外部框架。我在网上查找示例代码,但其中
我正在使用 Sparkle 向我的 OS X 应用程序分发更新。它对我的大多数用户来说运行良好,但我收到少数用户的报告,称“检查更新”已被禁用。 我在网上能找到的唯一其他示例来自从未见过启用“检查更新
我完全陷入了一个可能非常简单的操作......将 Sparkle 添加到在 Xcode 4 中创建的项目中。我做了这些操作: 将 Sparkle.framework 添加到我的项目中(拖放) 添加到“
我对这个网站有影响 http://www.immersive-garden.com/有这个闪光点,悬停时你会得到背景,我想要类似的东西而不使用闪光灯这是我现在正在使用的脚本 /* Particle E
我是一名优秀的程序员,十分优秀!