Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 确定Windows服务器是否可用?_Cocoa_Macos - Fatal编程技术网

Cocoa 确定Windows服务器是否可用?

Cocoa 确定Windows服务器是否可用?,cocoa,macos,Cocoa,Macos,我正在为OS X编写一个框架,该框架可由与OS X Windows服务器连接或未连接的应用程序使用(即GUI应用程序和命令行应用程序都通过ssh会话运行)。该框架中的一个类用于跨network和移动主目录跟踪用户主文件夹中的文件(在OS X上,用户可以通过服务器的AFP服务其主目录——“网络主目录”——或者同步相同的主文件夹以进行脱机访问——“移动主目录”) 因为我需要跨文件系统跟踪文件,所以我们选择使用相对路径,而不是OS X别名(或10.6NSURL书签)。当找不到文件时,我需要请求用户输入

我正在为OS X编写一个框架,该框架可由与OS X Windows服务器连接或未连接的应用程序使用(即GUI应用程序和命令行应用程序都通过ssh会话运行)。该框架中的一个类用于跨network和移动主目录跟踪用户主文件夹中的文件(在OS X上,用户可以通过服务器的AFP服务其主目录——“网络主目录”——或者同步相同的主文件夹以进行脱机访问——“移动主目录”)

因为我需要跨文件系统跟踪文件,所以我们选择使用相对路径,而不是OS X别名(或10.6
NSURL
书签)。当找不到文件时,我需要请求用户输入以重新定位该文件(例如Alias Manager如何提示用户重新连接损坏的别名)。如果应用程序已经(或可以)连接到Windows服务器,则只需使用
NSOpenPanel
即可。但是,当应用程序无法连接到Windows服务器时,我需要使用另一种方法来获取用户输入

那么,如何从famework代码中判断要使用哪种方法呢?是否有方法通过编程确定Windows服务器连接是否可用(或可能)


我认识到,另一种架构(框架客户端提供回调机制来提示用户)将允许调用应用程序提供输入收集策略。但是,我希望使调用应用程序的操作尽可能简单,因此,如果可以的话,我的第一选择是将这些细节封装在框架中。

有一个名为
SECURITYSESSIONID
的环境变量,由loginwindow.app设置,并传递给用户的应用程序。如果通过ssh登录,则不会设置该变量。它充当与窗口服务器对话的句柄

问题:此变量的存在并不意味着此用户当前控制窗口管理器(请考虑快速用户切换)

ApplicationServices框架中有一个名为
CGSessionCopyCurrentDictionary
的函数,看起来很有希望:

返回值:窗口服务器会话字典,如果调用方未在Quartz GUI会话中运行或窗口服务器被禁用,则返回NULL。你应该在用完字典后把它放了。有关此字典中键值对的信息,请参阅“Windows服务器会话属性”


在这种情况下,当没有可用的窗口服务器时,CgWindowsServerCfMachPort似乎也可以提供相同的信息(它也返回NULL)。谢谢你的指点!不要忘记检查会话是否为当前会话(用户控制窗口服务器:未快速切换),因为即使没有当前会话,Lion
CgWindowsServerCfMachPort
也会成功,因此不好
CGSessionCopyCurrentDictionary
更可靠一些,但您仍然无法从终端区分ssh,因为两者现在都会提供完整的会话信息,所以
ssh\U连接
是唯一的判断方法。