您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 终端服务在企业中的应用-MicrosoftCorpor
SVR352扩展WindowsServer终端服务在企业中的应用课程内容概述您可能还不知道终端服务的潜力到底有多大?让我们看看如何设计在终端服务里平稳运行、功能先进的企业应用程序。首先,了解终端服务应用软件的设计规范;其次,研究如何使用终端服务的脚本接口、API与托管代码调用方法;最后,我要介绍一个可以实现灵活定制的库:虚拟通道。适合听众:企业IT架构师、开发人员预备知识:终端服务的概念与使用经验,Scripting,Windows开发技能和.NET开发技能。课程内容安排终端服务的协议、架构与模式使用脚本或API操作终端服务使用.NETFramework操作终端服务跨越边界-虚拟通道应用程序终端服务的协议、架构和应用程序规范终端服务的概念穿透的客户机/服务器环境终端服务器环境-基于服务器进行计算终端服务的概念终端服务器RDP协议远程桌面客户端安装应用程序终端服务的应用服务器模式注销目前登录的用户退出安装过程中会加以修改的服务和程序安装过程中禁止用户登录“ChangeLogon/Disable”使用控制面板内的“添加删除程序”进行安装,自动会进入安装模式注意:如果必要,你可以手工进入安装模式“ChangeUser/Install”安装应用程序之后的任务安装完毕后,系统需从“安装模式”恢复到“执行模式”如果必要的话,也可以手工来做:“Changeuser/execute”重新启动刚才退出的应用程序或服务允许用户登录“Changelogon/enable”双模式的意义只有在应用服务器模式才存在安装和执行分开的“双模式”现象。双模式的分工:应用程序兼容性注册表重定向(又称shadowing)临时文件重定向.ini文件映射API重定向安装模式管理员用户Registry:HKCU(UserProfile–Admin)Registry:ShadowKeys–WriteGlobal.iniFiles(%WinDir%,\WINDOWS)GlobalTempFiles(%Temp%)GlobalAPICalls(GetWindowsDirectory)Registry:HKCU(UserProfile–User)Registry:ShadowKeys–ReadAdapted.iniFiles(%WinDir%,\WINDOWS)SpecificTempFiles(%Temp%)SpecificAPICalls(GetWindowsDirectory)注册表重定向适合多用户同时使用的应用程序安装和配置设计规范具有可靠的无值守安装和无界面安装,含默认配置。默认安装到ProgramFiles目录识别和覆盖旧版本支持“添加/删除程序”界面,以及“AllUsers”安装。不替换受Windows文件保护的文件避免不必要的重新启动允许管理员根据公司政策设置安全性和用户界面选项。适合多用户同时使用的应用程序安全性设计规范可以使用一般或者受限用户的权限运行-不依赖于本地管理员权限。避免读写本机注册表模块和系统文件夹。应用程序默认不会跳过系统安全检查步骤。应用程序能够应付“拒绝访问”的错误。适合多用户同时使用的应用程序设计上的考虑因素应用程序应该可以允许多个交互用户同时使用。不使用全局互斥或者限制实例数量。不使用系统全局数据,比如IP地址或者主机名,来标识用户。无共享组件冲突(DLLs)全局的数据和单个用户的数据严格区别开来。单个实例不会独占所有的资源,比如内存、CPU、I/O等等。适合多用户同时使用的应用程序多用户程序的文件访问设计规范文件访问锁定–多个用户可能同时访问应用程序的文件文件访问权限–把普通用户和管理员的访问权限区别开来(full,readorexecute权限)文件保存地址–把用户产生的数据默认保存在用户自己的Profile目录里(提供定制界面)防止访问系统文件–在运行时不提供向应用程序自身目录和系统目录的写入。为每个用户使用不同的临时文件。适合多用户同时使用的应用程序编码指南尽量使用环境变量,避免硬编码,比如C:\Windows,C:\Programfiles或者C:\Temp。使用Win32APIs去调用打印机、注册表、连接名称或者其它和环境相关的功能。避免使用.ini文件、实在要用,只使用标准Win32API去访问.ini文件(比如WritePrivateProfileString)大多数兼容性不好的应用程序可以通过外加脚本来解决。终端服务的编程方法终端服务器脚本使用脚本可以访问绝大多数系统和终端服务器的设置。终端服务的WMI接口提供当前连接和活动配置信息。ADSIExtensionforTerminalServicesuserconfiguration(TSUSEREX.DLL)可以用来管理和终端服务相关的用户属性。MicrosoftWindowsServer2003脚本中心:‘修改终端服务的Home目录。strComputer=.SetobjWMIService=GetObject(winmgmts:_&{impersonationLevel=impersonate}\\„_&strComputer&\root\cimv2)SetcolItems=objWMIService.ExecQuery_(Select*fromWin32_TerminalServiceSetting)ForEachobjItemincolItemserrRes=objItem.SetHomeDirectory(u:\tsusers)NextTSWMI脚本TSAPI简介TerminalServicesAPI是Wtsapi32.dll提供的函数可以在自己的应用程序中配置和管理终端服务器TSAPI简介下述操作系统提供TSAPI(Wtsapi32.dll)MicrosoftWindowsNTServer4.0SP4,TerminalServerEditionMicrosoftWindows2000MicrosoftWindowsXPMicrosoftWindowsServer2003TSAPI简介用户态核心态鼠标,键盘图像Wtsapi32.dllTS服务RdpwsxSmssTS设备驱动程序Termdd.sysRdpwd.sysTdtcp.sysTSAPI应用程序内核Win32k.sys显示驱动Rdpdd.sysWinlogonCsrss会话中的应用程序剖析Wtsapi32.dll使用各种工具(VisualStudio)列出Wtsapi32.dll的引出函数表MicrosoftBinaryFileDumper:“dumpbin–exportswtsapi32.dll”MicrosoftLinker:“link/dump/exportswtsapi32.dll”DependencyWalkerDepends.exe剖析Wtsapi32.dllTSAPI函数[1/2]函数描述WTSOpenServer打开到终端服务器的一个句柄WTSCloseServer关闭到终端服务器的句柄WTSDisconnectSession把某用户从活动会话上断开WTSLogoffSession把某用户从活动会话上注销WTSSendMessage在会话中显示一个消息框WTSShutdownSystem关闭或重新启动终端服务器TSAPI函数[2/2]函数描述WTSEnumerateServers枚举终端服务器WTSEnumerateSessions枚举某终端服务器的会话WTSEnumerateProcesses枚举会话中的进程WTSTerminateProcess终止会话中的某进程WTSQuerySessionInformation查询会话信息WTSQueryUserConfig查询用户配置信息WTSQueryUserToken获得用户访问令牌TSAPI编码推荐:VisualStudio.Net加PlatformSDK(终端服务API)C语言开发人员incldue头文件:Wtsapi32.h修改配置属性|链接器|命令行|附加选项-加入“Wtsapi32.lib”。修改配置属性|常规|字符集-“使用多字节字符集”修改配置属性|C/C++|高级|编译目标-“编译为C代码(/TC)”修改配置属性|C/C++|代码生成|运行时库-“多线程调试(/MTd)”或者“多线程(/MT)”TS编码流程1.获取终端服务器的名称2.获取该终端服务器的句柄3.执行相应的任务,比如枚举和管理用户会话或进程4.释放分配的资源,比如缓冲内存5.关闭终端服务器的句柄#includestdio.h#includewindows.h#includewtsapi32.hintmain(intargc,char*argv[]){char*pszServerName=NULL;HANDLEserverHandle;PWTS_PROCESS_INFOpProcessInfo;serverHandle=WTSOpenServer(pszServerName);//moreTSspecificcodeWTSFreeMemory(pProcessInfo);WTSCloseServer(serverHandle);}TSAPIC语言范例代码在.NET语言中使用TSAPI终端服务API-非托管代码终端服务API目前没有标准.NET类库在托管代码里面需要使用PlatformInvoke(P/Invoke)TSAPIP/InvokeWrapperClassPlatformInvoke是用来让托管代码调用DLL中的非托管代码的一个服务。在包装类中,每一个DLL需要定义一个静态方法。包装之后,可以像一般的静态函数一样调用。[DllImport(wtsapi32.dll)]publicstaticexternIntPtrWTSOpenServer(StringstrServername);usingSystem;usingSystem.Runtime.InteropServices;usingHANDLE=System.IntPtr;namespaceTsNET{classProgram{staticvoidMain(string[]args){HANDLEhServer=IntPtr.Zero;StringstrServername=null;hServer=WTS.WTSOpenServer(strServername);WTS.WTSCloseServer(hServer);}}}TSAPIVisualC#范例代码终端服务的虚拟通道技术虚拟通道虚拟通道可以扩展终端服务器的功能客户端组件终端服务客户端运行的时候会把DLL加载进内存。应用程序嵌入RDPActiveX控件。服务器端组件在终端服务中的某会话中运行
本文标题:终端服务在企业中的应用-MicrosoftCorpor
链接地址:https://www.777doc.com/doc-1600762 .html