月度归档:2013年07月

sql2000常见问题

////////////////////////////////安装问题//////////////////////////

Win2k      装不上      SQL      Server      2000      问题很常见.
//          (1)配置服务器时中断.
//          (2)注册      ActiveX      时中断.
//          (3)显示到100%的时候中断.
当然重新安装      Windows      2000      完全可以安装      SQL      Server      2000.

安全起见:
1>先备份您的注册表.
2>备份您的数据[进不了SQL      Server      2000,可以备份      Program
Files\Microsoft      SQL  &nbsp103f;   Server\MSSQL\Data      文件夹的文件.]

您必须知道:
Windows      2000        Server可以安装SQL      Server      2000的任何版本.
Windows      2000        Professional只能安装SQL      Server      2000的个人版本.(通过一些办法也可以安装其他版本)

有两种办法:
1:先卸载您的      SQL      Server      2000,必要的时候删除      Program
Files\Microsoft      SQL      Server      文件夹.
2:放入      SQL      Server      2000      光盘.
3:在”开始”–“运行”键入      “F:\x86\setup.exe      k=dbg”      (F是光盘)
[此命令的意思单步运行安装      SQL      Server      2000]
4:98%安装不成功,没有任何的提示.可能是:
(1)配置服务器时中断.
(2)注册      ActiveX      时中断.
(3)显示到100%的时候中断.

这样一来,您只能使用下面的办法了!否则,您只有      FORMAT了!
1      打开注册表
在”开始”–“运行”键入      “regedit”
2      按下列顺序点击打开
+      HKEY_LOCAL_MACHINE
+      SOFTWART
+      Microsoft
+      Windows
+      CurrentVersion
&103fnbsp;                                       +      Setup
+      ExceptionComponents
3      将      ExceptionComponents      下面的文件夹全部删除!
如      {60BFF50D-FB2C-4498-A577-C9548C390BB9}
{60BFF50D-FB2C-4498-A577-C9548C390BB9}
{60BFF50D-FB2C-4498-A577-C9548C390BB9}
{60BFF50D-FB2C-4498-A577-C9548C390BB9}
…….

4      重新启动:
5      重新安装      SQL      Server      2000

————————————————————————————–
如果问题依旧,试试先修复操作系统.

命令提示符下执行:
sfc      /scannow

最后的方法:换Windows 2000 安装盘 和SQL Server2000安装盘

有时候问题的原因很奇怪,有人曾更换了一个电源就解决了问题。

1 先卸载您的 SQL Server 2000,必要的时候删除 Program FilesMicrosoft SQL Server 文件夹

2 打开注册表 在”开始”–“运行”键入 “regedit”

3 按下列顺序点击打开 + HKEY_LOCAL_MACHINE + SOFTWART + Microsoft + Windows + CurrentVersion + Setup + ExceptionComponents

4 将 ExceptionComponents 下面的文件夹全部删除! 如 {60BFF50D-FB-4498-A577-C390BB9} {60BFF50D-FB-4498-A577-C390BB9} {60BFF50D-FB-4498-A577-C390BB9} {60BFF50D-FB-4498-A577-C390BB9}

6 重新启动: 7 重新安装 SQL Server 2000

其他方法: — SQL Server 2000安装错误“安装配置服务器失败”解决方法

研究了两天的心得。 安装SQL Server 2000时,在安装后面如果出现“安装配置服务器失败”错误,并且安装终止时,可能引起的原因如下: 当您在安装了证书服务器的计算机上安装 SQL Server 2000 时将出现一个错误消息。如果证书服务器安装在运行 Microsoft Windows 2000/2003 的计算机103f上,且证书颁发机构 (CA) 名称与机器主机名相同或以机器主机名开头,那么您的 SQL Server 2000 安装程序将失败,您会收到下面的错误消息: 安装程序配置服务器失败。参考服务器错误日志和 C:WINDOWSsqlstp.log 了解更多信息。

此问题最早是在 SQL Server 2000 Service Pack 1 中纠正的。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 302409 FIX:Unable to Connect to SQL Server 2000 When Certificate Authority Name Is the Same As the Host Name of the Windows 2000 Computer 解决方法:删除“证书服务”。

(1) 打开“控制面板”->“添加或删除程序”->“添加/删除Windows组件”

(2) 在打开的窗口中,把“证书服务”前面的勾去掉,如下图所示:

(3) 点击下一步,直至完成。

(4)重新安装SQL Server 2000。

问:安装MSDE时出现:“配置服务器失败,请参考服务器错误日志和安装错误日志,以了解更多信息”

答:此问题可能是由于计算机系统驱动器上还保留着以前的用户数据,安装程序不会覆盖以前的用户数据,因而导致配置服务器失败。

可以尝试用下面的方法来解决此问题: 删除 [系统驱动器号]:Program FilesMicrosoft SQL ServerMSSQL 文件夹

另外,安装时还要注意:

1、用有系统管理员权限的用户来执行安装操作;

2、建议安装前先退出其他应用程序,和暂停使用防病毒软件和防火墙; 如果机器上安装过SQL Server 清理操作系统注册表下如下路径的残存文件: HKEY_CURRENT_USERSoftwareMicrosoftMSSQLServer HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServer 并且删除磁盘中原来安装路径下的残存文件

//////////////////////////////////////卸载//////////////////////////////////////////////////////////

 

如何卸载SQLServer2000

通过正常方法无法卸载SQLServer2000时,可以使用下面的方法:
(1)在计算机windows的“开始-运行”弹出窗口内录入“regedit.exe”,在出现的〔注册表编辑器〕里删除以下选项。     # HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer
# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQLServer
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServer
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSERVERAGENT
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerADHelper
(2)手工删除SQL Server 2000默认安装目录C:\Program Files\Microsoft SQL Server。
(3)重新启动计算机。重装SQL或者MSDE的注意事项

重新安装SQL或者MSDE必须注意以下几个方面的要点。
(1)计算机是否按照上面所介绍的已经完整的删除了SQL旧软件和它的注册表信息。
(2)SQL不能安装在除win 2000以外的系统上,而如果要安装服务器的SQL,那么计算机必须首先安装了win2000Server或者Win2000 Advance Server,这样的系统基础才可以安装SQL Server 2000作为服务器端数据库。
(3)MSDE可以在任何windows系统内安装作为单机版数据库环境,但如果计算机已经存在SQL或者MSDE系统,重新安装就会出错,必须完整删除已有的SQL或者MSDE系统才能重装。
(4)重装完毕必须重启计算机。解决sql2000挂起无法安装的问题

解决sql2000挂起无法安装的问题
出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。
步骤是:
1)添加/删除程序中彻底删除sql server。
2)将没有删除的sql server目录也删除掉。
3)打开注册表编辑器,在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
中找到PendingFileRenameOperations项目,并删除它。这样就可以清除安装暂挂项目。
4)删除注册表中跟sql server相关的键。
一般只需要执行第三步就能解决问题了SQL Server 2000端口连接不上

SQL    Server连接中的三个最常见错误:

一.”SQL    Server    不存在或访问被拒绝”

这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多.

一般说来,有以下几种可能性:

1,SQL    Server名称或IP地址拼写有误
2,服务器端网络配置有误
3,客户端网络配置有误

要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因.

=============    首先,检查网络物理连接    =============
ping    <服务器IP地址/服务器名称>

如果    ping    <服务器IP地址>    不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等.
还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如    ISA    Server.防火墙软件可能会屏蔽对    ping,telnet    等的响应
因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口.

如果ping    <服务器IP地址>    成功而,ping    <服务器名称>    失败
则说明名字解析有问题,这时候要检查    DNS    服务是否正常.
有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析,
具体的方法是:

1.使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc).
添加一条IP地址与服务器名称的对应记录,如:
172.168.10.24    myserver

2.或在    SQL    Server    的客户端网络实用工具里面进行配置,后面会有详细说明.

=============    其次,使用    telnet    命令检查SQL    Server服务器工作状态    =============
telnet103f    <服务器IP地址>    1433

如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明    SQL    Server    服务器工作正常,并且正在监听1433端口的    TCP/IP    连接
如果命令返回”无法打开连接”的错误信息,则说明服务器端没有启动    SQL    Server    服务,
也可能服务器端没启用    TCP/IP    协议,或者服务器端没有在    SQL    Server    默认的端口1433上监听.

=============接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道.是否启用了    TCP/IP    协议等等    =============
可以利用    SQL    Server    自带的服务器网络使用工具来进行检查.

点击:程序    —    Microsoft    SQL    Server    —    服务器网络使用工具

打开该工具后,在”常规”中可以看到服务器启用了哪些协议.
一般而言,我们启用命名管道以及    TCP/IP    协议.
点中    TCP/IP    协议,选择”属性”,我们可以来检查    SQK    Server    服务默认端口的设置
一般而言,我们使用    SQL    Server    默认的1433端口.如果选中”隐藏服务器”,则意味着客户端无法通过枚举服务器来看到这台服务器,起到了保护的作用,但不影响连接.

=============    接下来我们要到客户端检查客户端的网络配置    =============
我们同样可以利用    SQL    Server    自带的客户端网络使用工具来进行检查,
所不同的是这次是在客户端来运行这个工具.

点击:程序    —    Microsoft    SQL    Server    —    客户端网络使用工具

打开该工具后,在”常规”项中,可以看到客户端启用了哪些协议.
一般而言,我们同样需要启用命名管道以及    TCP/IP    协议.
点击    TCP/IP    协议,选择”属性”,可以检查客户端默认连接端口的设置,该端口必须与服务器一致.

单击”别名”选项卡,还可以为服务器配置别名.服务器的别名是用来连接的名称,
连接参数中的服务器是真正的服务器名称,两者可以相同或不同.别名的设置与使用HOSTS文件有相似之处.

通过以上几个方面的检查,基本上可以排除第一种错误.  &103fnbsp;

—————————————————————————–

二.”无法连接到服务器,用户xxx登陆失败”

该错误产生的原因是由于SQL    Server使用了”仅    Windows”的身份验证方式,
因此用户无法使用SQL    Server的登录帐户(如    sa    )进行连接.解决方法如下所示:

1.在服务器端使用企业管理器,并且选择”使用    Windows    身份验证”连接上    SQL    Server
2.展开”SQL    Server组”,鼠标右键点击SQL    Server服务器的名称,选择”属性”,再选择”安全性”选项卡
3.在”身份验证”下,选择”SQL    Server和    Windows    “.
4.重新启动SQL    Server服务.

在以上解决方法中,如果在第    1    步中使用”使用    Windows    身份验证”连接    SQL    Server    失败,
那就通过修改注册表来解决此问题:

1.点击”开始”-“运行”,输入regedit,回车进入注册表编辑器
2.依次展开注册表项,浏览到以下注册表键:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名称”LoginMode”,双击编辑双字节值
4.将原值从1改为2,点击”确定”
5.关闭注册表编辑器
6.重新启动SQL    Server服务.

此时,用户可以成功地使用sa在企业管理器中新建SQL    Server注册,
但是仍然无法使用Windows身份验证模式来连接SQL    Server.
这是因为在    SQL    Server    中有两个缺省的登录帐户:
BUILTIN\Administrators
<机器名>\Administrator    被删除.
要恢复这两个帐户,可以使用以下的方法:

1.打开企业管理器,展开服务器组,然后展开服务器
2.展开”安全性”,右击”登录”,然后单击”新建登录”
3.在”名称”框中,输入    BUILTIN\Administrators
4.在”服务器角色”选项卡中,选择”System    Administrators”
5.点击”确定”退出
6.使用同样方法添加    <机器名>\Administrator    登录.

说明:

以下注册表键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLSer103fver\LoginMode
的值决定了SQL    Server将采取何种身份验证模式.
1.表示使用”Windows    身份验证”模式
2.表示使用混合模式(Windows    身份验证和    SQL    Server    身份验证).

—————————————————————————–

三.提示连接超时

如果遇到第三个错误,一般而言表示客户端已经找到了这台服务器,并且可以进行连接,
不过是由于连接的时间大于允许的时间而导致出错.
这种情况一般会发生在当用户在Internet上运行企业管理器来注册另外一台同样在Internet上的服务器,
并且是慢速连接时,有可能会导致以上的超时错误.有些情况下,由于局域网的网络问题,也会导致这样的错误.

要解决这样的错误,可以修改客户端的连接超时设置.
默认情况下,通过企业管理器注册另外一台SQL    Server的超时设置是    4    秒,
而查询分析器是    15    秒(这也是为什么在企业管理器里发生错误的可能性比较大的原因).

具体步骤为:
企业管理器中的设置:
1.在企业管理器中,选择菜单上的”工具”,再选择”选项”
2.在弹出的”SQL    Server企业管理器属性”窗口中,点击”高级”选项卡
3.在”连接设置”下的”登录超时(秒)”右边的框中输入一个比较大的数字,如    20.

查询分析器中的设置:
工具    —    选项    —    连接    —    将登录超时设置为一个较大的数字

===================================================================

总结:

1.先保证ping通(有防火墙的先关闭防火墙)
2.在命令提示符下执行:telnet    <服务器ip地址>    1433    不会报错
3.连接时使用用ip连接企业管理器
4.如果不行
SQL    Server服务器–开始–程序–Microsoft    SQL    Server
–服务器网络实用工具
–启用    WinSock代理
–代理地址:(sqlserver服务器IP)
–代理端口–1433
—确定

5.如果还不行,在客户端装个SQL    Server客户端配置一下:
开始–程序–Microsoft    SQL    Server–客户端网络实

变量命名规则

一、匈牙利命名法(the Hungarian notation):

 

         广泛应用于象Microsoft Windows这样的环境中。

         Windows 编程中用到的变量(还包括宏)的命名规则匈牙利命名法,这种命名技术是由一位能干的 Microsoft 程序员查尔斯·西蒙尼(Charles Simonyi) 提出的。

匈牙利命名法通过在变量名前面加上相应的小写字母的符号标识作为前缀,标识出变量的作用域,类型等。这些符号可以多个同时使用,顺序是先m_(成员变 量),再指针,再简单数据类型,再其他。例如:m_lpszStr, 表示指向一个以0字符结尾的字符串的长指针成员变量。

匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途。

匈牙利命名法中常用的小写字母的前缀:

前 缀             类  型
a                     数组 (Array)
b                     布尔值 (Boolean)
by                   字节 (Byte)
c                     有符号字符 (Char)
cb                   无符号字符 (Char Byte,没有多少人用)
cr                    颜色参考值 (ColorRef)
cx,cy               坐标差(长度 ShortInt)
dw                   Double Word
fn                    函数
h                     Handle(句柄)
i                      整型
l                      长整型 (Long Int)
lp                    Long Pointer
m_                  类的成员
n                     短整型 (Short Int)
np                   Near Pointer
p                     Pointer
s                     字符串型
sz                    以null做结尾的字符串型 (String with Zero End)
w                     Word

二、骆驼命名法(camelCase notation):

骆驼式命令法,正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字。例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:

printEmployeePaychecks();

print_employee_paychecks();

第一个函数名使用了骆驼式命名法——函数名中的每一个逻辑断点都有一个大写字母来标记;第二个函数名使用了下划线法—-函数名中的每一个逻辑断点都有一个下划线来标记。

骆驼式命名法近年来越来越流行了,在许多新的函数库和Microsoft Windows这样的环境中,它使用得当相多。另一方面,下划线法是c出现后开始流行起来的,在许多旧的程序和UNIX这样的环境中,它的使用非常普遍。

三、帕斯卡命名法(the pascal notation)

与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写

如:public void DisplayInfo();

string UserName;

二者都是采用了帕斯卡命名法.

在C#中,以帕斯卡命名法和骆驼命名法居多。

简单说

MyData 就是一个帕斯卡命名的示例
而myData是一个骆驼命名法,它第一个单词的第一个字母小写,后面的单词首字母大写,看起来像一个骆驼 而iMyData是一个匈牙利命名法,它的小写的i说明了它的类型,后面的和帕斯卡命名相同,指示了该变量的用途.

 

南怀瑾给的药/刘澜

那天晚上,彼得.圣吉的喉咙很痛。南怀瑾给了他两包药,一包吃下去,另一包含在嘴里。圣吉是提出“学习型组织”的西方管理学大师,却每年都来中国向这位国学大师求教。他们主要谈禅、生命和认知,就是没有谈过管理。

那天晚上,圣吉的嗓子说不出话来,另外有人把话题扯到管理上,说想帮助企业家提高人文素质。南怀瑾泼了盆冷水,说中国现在没有企业家,都在乱搞,在投机取巧。

企业这个定义,以中文来讲,做一件事业,做一个工作,前途有无限的希望,对社会是有贡献的,而且是永久的,不是做了几十年就没有了,一代一代相传,那个才叫企业。”现实是什么呢?“现在没有这个企业的观念,只要开个公司,做个生意,怎么去赚钱,就叫做企业,根本就是错误。”

圣吉应该同意这个观点。同一天上午他在浙江大学演讲,就批评了以市场经济作为宗教指导人的价值,反对每个人都在寻求看得见的利益、什么都用利益来衡量,提出了如何把企业家从经济动物转变成社会动物的课题。

南怀瑾显然把陈峰这样的“优秀企业家”也一棍子打死了。海航集团董事长陈峰也算南怀瑾的学生,但是老师说他修养工夫还没有入门。南怀瑾说这个话,是在103f陈峰邀请他做的讲演上。这个讲演,据说来自全国各地的工商巨子都赞不绝口,都说这才真正懂得什么叫“事业”。

南怀瑾说:“你们现在工商业做得好,很发财,或者官做得很大,这不是事业,这个是职业。中国文化,什么叫做事业呢?出在孔子著的《易经系传》的一句话,叫做:‘举而措之天下之民,谓之事业。’一个人一辈子,做一件事情对社会大众有贡献,对国家民族、对整个的社会,都是一种贡献,这才算是事业。”

把企业作为真正的企业——也就是事业——来办,才算是真正的企业家。南怀瑾给的这包药,企业家们不能只含在嘴里,而是要实实在在吃下去。

文章引用自:

VC制作系统服务/zz/

本文主要介绍了 OpenSCManager、CreateService、OpenService、ControlService、DeleteService、RegisterServiceCtrlHandler、SetServiceStatus、StartServiceCtrlDispatcher等操作服务程序的主要几个API的用法,具体的函数参数大家可以查阅MSDN。

为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。下面就跟着我一步一步地教你怎么去创建一个服务应用程序吧。

一、建立 Win32 Application 应用程序(当然你也可以建立其它的应用程序,但服务一般是没有用户界面的),并命名为 ServiceTest。

二、定义全局函数变量。这里主要是设置服务句柄和状态。 BOOL IsInstalled(); BOOL Install(); BOOL Uninstall(); void LogEvent(LPCTSTR pszFormat, …); void WINAPI ServiceMain(); void WINAPI ServiceStrl(DWORD dwOpcode); TCHAR szServiceName[] = _T(“ServiceTest”); BOOL bInstall; SERVICE_STATUS_HANDLE hServiceStatus; SERVICE_STATUS status; DWORD dwThreadID;

三、添加Init初始化函数。 void Init() { hServiceStatus = NULL; status.dwSer103fviceType = SERVICE_WIN32_OWN_PROCESS; status.dwCurrentState = SERVICE_STOPPED; tatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; status.dwWin32ExitCode = 0; status.dwServiceSpecificExitCode = 0; status.dwCheckPoint = 0; status.dwWaitHint = 0; }

四、添加安装和删除服务函数。这里主要是用到了五个函数 OpenSCManager,CreateService,OpenService,ControlService和DeleteService 。
OpenSCManager 用于打开服务控制管理器;CreateService 用于创建服务;OpenService用于打开已有的服务,返回该服务的句柄;ControlService则用于控制已打开的服务状态,这里是让服务停止后才删除;DeleteService 用于删除指定服务。

BOOL Install(); { //这里列出主要的两个函数,其它的可以在代码里找。
//打开服务控制管理器
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); //创建服务
SC_HANDLE hService = ::CreateService( hSCM, szServiceName, szServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szFilePath, NULL, NULL, _T(“”), NULL, NULL);
::CloseServiceHandle(hService);

::CloseServiceHandle(hSCM); }

BOOL Uninstall(); { //这里列出主要的两个函数,其它的可以在代码里找。
//打开服务控制管理器
OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

//打开服务
OpenService(hSCM, szServiceName, SERVICE_STOP | DELETE);

//停止服务
ControlService(hService, SERVICE_CONTROL_STOP, &status);

//删除服务
DeleteService(hService); … }

五、添加服务主线程函数和控制函数。这里调用 RegisterServiceCtrlHandler 来注册服务的控制函数,这里要设置status.dwControlsAccepted 为 SERVICE_ACCEPT_STOP,否则你不能控制这个服务的状态。

void WINAPI ServiceMain() { // Register the control request handler
status.dwCurrentState = SERVICE_START_PENDING;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP;//这个要使用,否则你不能控制
//注册服务控制
hServiceStatus = RegisterServiceCtrlHandler(szServiceName, ServiceStrl);
if (hServiceStatus == NULL) { LogEvent(_T(“Handler not installed”));
return; }
SetServiceStatus(hServiceStatus, &status);
status.dwWin32ExitCode = S_OK;
status.dwCheckPoint = 0;
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(hServiceStatus, &status);
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
int i = 0; while (i < 10) { Sleep(1000); i++; } //
status.dwCurrentState = SERVICE_STOPPED;
SetServiceStatus(hServiceStatus, &status);
LogEvent(_T(“Service stopped”)); }

六、在主线程函数里注册控制函数和程序执行主体。这里主要是说明这就是程序的执行体。
void WINAPI ServiceMain() { …
//模拟服务的运行,10后自动退出。应用时将主要任务放于此即可
int i = 0; while (i < 10) { Sleep(1000); i++; } … }

七、最后,要在main函数里注册添加安装、删除、注册主函数。

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { Init(); dwThreadID = ::GetCurrentThreadId(); SERVICE_TABLE_ENTRY st[] = { { szServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMain }, { NULL, NULL } }; if (stricmp(lpCmdLine, “/install”) == 0) { Install(); } else if (stricmp(lpCmdLine, “/uninstall”) == 0) { Uninstall(); } else { if (!::StartServiceCtrlDispatcher(st)) { LogEvent(_T(“Register Service Main Function Error!”)); } } return 0; }

八、总结。其实做一个服务程序并不难,主要是懂得程序的执行体放于哪里?和注册程序的主函数和注册控制函数,如果这两个没有注册的话,你就程序就不知道如何去控制了。statu103fs.dwControlsAccepted = SERVICE_ACCEPT_STOP;这个也重要,如果你没有设置的话,那么服务就不会受你控制了。

Windows SharePoint Services的备份与还原/zz/

不久前在MICROSOTE网站上看到一份关于WSS的备份与恢复,在这里,我在简单的引用一下,已便大家共享。移动、备份和还原站点内容或整个站点的选项包括:
。列表或站点模板
。Web 数据包
。FrontPage
。SQL Server
。Windows SharePoint Services 工具

1、列表和库模板

您可以获取 Windows SharePoint Services 列表或库,将其转换为模板,用于创建新列表或新库。列表和库模板保存在每个站点中,您可以选择是将列表或库数据保存到模板中,还是只保存列表或库结构。列表和库模板大小只能限制在 10 MB。

2、站点模板

您可以获取使用 Windows SharePoint Services 创建的站点,将其转换为模板,用于在同一站点集合中创建新站点。您可以选择是将站点数据作为模板的一部分保存,还是只保存站点结构。站点模板创建后,该模板将显示在站点模板选取页上,用户可从该页跳转开始创建新站点。站点模板大小只能限制在 10 MB。

3、Web 数据包

Microsoft Office Front103fPage 2003 包括新型 Web 数据包功能,该功能允许您将基于 FrontPage 2003 或 Windows SharePoint Services 创建的站点中的全部或某些文件及结构放在一起,放入一个数据包中,然后便可以使用此数据包在其他子站点或服务器上创建相同的站点。Web 数据包可以包含站点中所有内容,或仅包含一些指定元素;例如,您可以选择忽略特定网页、列表或库。Web 数据包可以包含网页内容和列表及库结构,但不能包含特定的站点内容 (如列表和库数据或文档) 及站点导航结构。不过,它们却可以包含自定义链接栏。

4、数据库备份和还原

因为基于 Windows SharePoint Services 创建的站点包含在 SQL Server 数据库中,因此,如果备份然后还原数据库,也就备份和还原了站点。要具有备份和还原 SQL Server 数据库的能力,需要具有访问服务器的管理权限。这个选项可备份和还原所有站点内容,包括安全性和权限。

5、管理员通过 Stsadm.exe 备份和还原

Windows SharePoint Services 中包含一个被称为 Stsadm.exe 的强大命令行管理工具。此工具允许管理员添加或删除用户、创建或删除站点、备份或还原站点,等等。还允许备份和还原站点集合,包括所有的站点内容及安全性和权限。使用 Stsadm.exe 需要具有访问服务器 (运行 Windows SharePoint Services) 的管理权限。

我只使用了其中最后的两种方式,在这之中用STSADM.EXE工具是最方便而且不容易出现错误的,如果想知道具体还原的做法,大家只要上网搜索一下就可以看到更为详细的内容了。

[转载&支持]开源爱好者致招商银行的公开信

开源爱好者致招商银行的公开信

发表: zeuux
时间: 2007/01/31 21:53:51

作者:徐继哲

大概在一年以前,我有了写这篇文章的想法,由于诸多事情,一拖再拖。最近,终于下决心要完成这封公开信。可我却用了三周的业余时间才完成这个短小的文章,这和我以前的写作经历相比,简直是蜗牛的速度。为什么这么艰难呢?因为在这篇文章里,我试图和大家讨论一个很多人被迫接受的、不合理的、甚至已经习以为常的事实,并期望和大家一起努力来改变这个事实。

多年以来,我一直都是招商银行的用户,同时也一直在忍受招商银行不平等的网上银行服务。无论是什么网络服务,都要遵循互联网的行业标准和技术标准,这是大家都知道的基本道理。可是不知为何,招商银行的网上银行服务却没有遵守W3C等互联网标准,而是采用了微软公司的专有软件技术,ActiveX。采用微软的ActiveX专有软件技术103f提供公共服务意味着什么?这意味着用户只有使用微软专有的IE(Internet Explorer)浏览器才能正常使用招商银行的网上银行服务;这意味着用户在使用网上银行时,招商银行将用户限制到了专有的、昂贵的、漏洞百出的专有软件Windows上,时下正在肆虐的“熊猫烧香”病毒不知又折磨了多少微软Windows用户;这意味着招商银行极大地提高了用户使用网上银行的成本,因为你只有花费上千元人民币购买微软的Windows操作系统才能使用招商银行的网上银行;这意味着招商银行引导用户降低了自己的道德水准,同时增加了用户的法律诉讼风险,因为我不认为我们普通老百姓有足够的财力去购买微软的Windows操作系统,绝大多数用户最终会选择盗版;这意味着像我这样的只使用GNU/Linux、*BSD、Firefox(大量的 Windows用户也在使用Firefox,因为它更安全)的大量自由软件用户无法正常使用我们应得的网上银行服务,因为我们拒绝专有软件,我们抵制软件专利,我们需要使用、学习、修改、再发行软件的自由;这意味着招商银行正在不公平地对待你的每一位用户,正在歧视自由软件用户;这意味着招商银行是一家业余的、虚弱的、不负责任的公司。

现在,作为一名招商银行用户和自由软件用户,我请求招商银行立刻放弃微软的专有软件技术,而是采用符合W3C、RFC等开放的、自由的互联网标准来开发网上银行服务。使用开放的、自由的标准意味着每个人都可以使用你的服务,无论他使用的是微软的专有软件还是GNU/Linux、*BSD、 Firefox等自由软件;意味着招商银行平等对待了每一位用户、无论是自由软件用户还是专有软件用户;意味着招商银行真的有能力“因您而变”,而不是空喊口号、欺骗大家;意味着招商银行是一家专业的、有责任感的公司;意味着现有的自由软件用户会继续使用招商银行,而不是转投其他银行,或者因为使用盗版专有软件而被起诉;意味着招商银行是一家心胸开阔、善于进取、值得信任的公司。

虽然使用ActiveX专有软件技术来提供公众服务是错误的,但我们也能看到招商银行的动机是好的:试图保障用户的帐户安全。在技术方面, ActiveX是微软专有的、过时的、兼容性极差的技术;任何采用ActiveX的网站都是人为地给用户引入一个潜在的入侵通道,为用户埋下了一个地雷。最近也有很多网友在讨论现有招商银行网上银行的安全隐患,比如:直接采用了某个可公开下载的二进制动态库文件,在发行自己的软件的时候没有做数字签名,这种低级的技术手段直接导致了用户的电脑可能被植入木马,等等。可是我认为我们根本没有必要讨论现有的技术实现是否安全。为什么呢?因为招商银行解决安全问题的思路是完全错误的,所以即使是安全的,我们也不能接受。下面我举个例子来说明招商银行解决安全问题的思路对于用户来说是多么的不方便、不友好和荒谬。招商很行宾馆创始于1999年,一直以来生意还不错,不过最近旅店发生了几起客房被盗的刑事案件,被盗旅客损失惨重,其他的旅客也都认为这是一个很严重的安全问题,敦促招商很行宾馆立即采取有效的安全措施,保障旅客的生命财产安全。招商很行宾馆的管理层召开了紧急会议,讨论解决之道,想来想去,管理者们一致认为:“向每个客房派驻一名训练有素的职业保镖是个万全之策!”。于是他们如获至宝,没有查阅国家对于宾馆行业制订的相关管理办法,也没有调查国际知名的宾馆都是如何解决这类问题的,就决定这么干了。并连夜联系到了城里最有名的保安公司:微硬公司。第二天,微硬公司经过积极努力,为

北京公交--每天都要肉搏的鏖战!

今天迟到,我早就知道今天肯定要迟到了。当我早上一出校门就看见车站上成堆等车的人群的时候,我就知道今天必迟到无疑!

站了半天,来了趟632,没有挤,因为根本已经爆满了。不一会第2辆也来了,我扎好架式,但是由于一手提着电脑,又没有多少空间调在哪了半天,最后脚还让车关门的时候还夹了,手也擦烂了,还是给挤了下来,55555555555。悲惨的世界呀。。。。

第3辆,来了离我很远根本没有可能挤上,没有动。接着是第4辆,停都没有停,一晃而过。

这是已经是必迟到了,多么的郁闷呀!心里面咒骂北京公交的同时,第5辆车远远的来了。。

我想这次一定要上,干脆把电脑包给背上,腾出双手来肉搏。。

等快要停的时候我冲到了门前面人群的最前面,终于挤上来了。

北京现在倡导排队,每个月还弄个排队日。排队么,我赞成,但是在上班时间根本不实际,那些个领导头头学者教授门早上起来挤挤公交车就知道了怎么回事了。。。我再此也就不说了。早上挤过车的人肯定

北京3级甲等医院

中国医学科学院北京市协和医院 首都医科大学附属北京同仁医院 卫生部北京医院 北京中医院 北京地坛医院(原北京市第一传染病医院) 北京中医药大学东直门医院 北京中日友好医院 北京朝阳医院 首都儿科研究所附属儿童医院 北京妇产医院北京市妇幼保健院 中国医学科学院肿瘤医院 首都医科大学附属北京安贞医院 北京大学人民医院 北京市急救中心 北京大学第一医院(北大医院) 首都医科大学附属北京儿童医院 中国医学科学院阜外心血管病医院 首都医科大学附属北京安定医院 北京积水潭医院/北京大学第四临床医学院 北京大学第三医院 中国中医研究院西苑医院 北京大学第六医院北京大学精神卫生研究所 北京肿瘤医院 北京大学临床肿瘤学院 北京铁路总医院 中国医学科学院整形外科医院 首都医科大学附属北京口腔医院 首都医科大学附属北京天坛医院 中国中医研究院北京广安门医院 首都医科大学宣武医院 首都医科大学附属北京友谊医院 北京中医药大学东方医院 首都医科大学附属北京佑安医院 中国康复研究中心(北京博爱医院) 北京回龙观医院 北京胸部肿瘤结核病医院 中国人民解放军总医院(三O一医院) 中国人民解放军三O二医院1037 中国人民解放军三O四医院 中国人民解放军第三O五医院 中国人民解放军第三O六医院 中国人民解放军三O七医院军事医学院附属医院 中国人民解放军第三O九医院 海军总医院 空军总医院 北京军区总医院 武警总医院 中国人民解放军第二炮兵总医院(原中国人民解放军二六二医院) 中国人民解放军四六六医院

从一则笑话分析需求的陷阱/zz/

某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”
男孩反问:“是无声枪么?”
“不是。”
“枪声有多大?”
“80~100分贝。”
“那就是说会震的耳朵疼?”
“是。”
“在这个城市里打鸟犯不犯法?”
‘不犯。”
“您确定那只鸟真的被打死啦?”
“确定。”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?”
“OK。鸟里有没有聋子?”
“没有。”
“有没有关在笼子里的?”
“没有。”
“边上还有没有其他的树,树上还有没有其他鸟?”
“没有。”
“方圆十里呢?”
“就这么一棵树!”
“有没有残疾或饿的飞不动的鸟?”
“没有,都身体倍棒。”
“算不算怀孕肚子里的小鸟?”
“都是公的。”
“都不可能怀孕?”
“………,决不可能。”
“打鸟的人眼里有没有花?保证是十只?”
“没有花,就十只。”
老师脑门上的汗已经流下来了,下课铃响起,但男孩仍继续问:“有没有傻的不怕死103f的?”
“都怕死。”
“有没有因为情侣被打中,自己留下来的?”
“笨蛋,之前不是说都是公的嘛!”
“同志可不可以啊!”
“…………,性取向都很正常!”
“会不会一枪打死两只?”
“不会。”
“一枪打死三只呢?”
“不会。”
“四只呢?”
“更不会!”
“五只呢?”
“绝对不会!!!”
“那六只总有可能吧?”
“除非你他妈的是猪生的才有可能!”
“…好吧,那么所有的鸟都可以自由活动么?”
“完全可以。”
“它们受到惊吓起飞时会不会惊慌失措而互相撞上?”
“不会,每只鸟都装有卫星导航系统,而且可以自动飞行。”
“恩,如果您的回答没有骗人,”学生满怀信心的回答,“打死的鸟要是挂在树上没掉下来,那么就剩一只,如果掉下来,就一只不剩。”
老师当即倒!

正值六一儿童节之际,用这篇笑话故事来做开头,笑过之后可能不少能会认为这个小朋友是需求调研的最佳人选。回顾软件开发上的许多案例,软件开发失败率一直居高不下,特别在外包开发这个领域中,这个值可能会更高一筹。在分析项目失败的原因的时候,需求的因素可能是失败的关键原因、需求不明确,客户对需求的变更频频等等。

1.需求的调研

需求调研是为需要说明书做前期工作,可以说需要说明书是从需求调研表中得到或抽取而出。需求调研是要了解客户希望所要开发的系统能够解决他们的问题,以及了解他们对系统的期望等等。需求调研是整个开发的基础,经过需求调研的结果整理出需求说明书作为后续开发使用。

如果做的项目是一个陌生的一个行业(专业),这是往往需要专家或者顾问等角色的协助,但是作为调研人员最少要想办法了解个专业,或许你需要成为这个行业的专家,但最少要了解一定的专业知识(最少专业词汇你要知道)。这样客户的沟通才能达到顺畅,不会出现牛头不对马嘴的现象。

在某些难度不是很大的行业或者项目,做需求调研的时候可以通过自学的方式了解行业的特点,这些项目往往因为规模比较小,也不会有专家的影子出现。但是作为调研的时候我们最需要了解的一些问题如:

1):客户目前的问题与苦难
2):客户现在的工作模式
3):客户对系统的期望
4):客户哪些要求是自己能做到的,那些是依靠系统来做
5):还有客户对系统开发方式以及时间的要求等等

其实做需求调研的时候最重要的目的在于资料收集,或许小孩的那种打破砂锅的方式会引起客户的反感,但是实际项目中往往需要的就是这些比较周全的调研方式,能够考虑到的问题点都需要和客户确认,尽量避免想当然的做法,只是采用的方式可能需要优化一下,采用良好的方式,尽量得到客户的最大配合。

2.需求的描述和确认

对于需求的调研内容需要进行整理和分类,分清有用功能、可选用功能、无用功能及不可实现功能。对于这些功能和客户再次确认之后才能最终形成开发的需求文档。对于需求的描述有很多的方法和工具,但是无论采用那种方法和工具都是相对抽象的方式,如何让客户能够理解需求的实际内容,需要客户有良好的理解能力,毕竟系统还只是纸面上的内容,客户还是很难完全了解到真实的系统。

如何对需求进行103f描述在项目开发中是一个很难定夺的题目,有些公司采用Demo的方式,有些采用传统的功能树的方式,有些采用界面的描述方式,有些采用UML建模的方式,形式多种多样。各种方式都有其好坏。但是对于方式的选择需要注意一些问题:

1)了解客户是否能够理解所描述的问题,
2)避免先入为主,
3)避免形式主义,

有些公司采用UML描述需求,但是客户的能力达不到能够理解UML所描述的问题,甚至公司内部的开发人员也无法很好的理解UML,可能只有需求人员懂 UML,这种需求结果就值得思考,客户是否知道你在说什么?如果你先入为主使用这种方式来描述问题,难道也期望客户去学习这些知识吗?

3.需求的控制

客户往往很难知道他们需要什么样的系统,有时候系统做到一半的时候客户会提出一些新的想法,更甚至等系统上线的时候客户才发现系统和他们脑子里想的东西完全不是一回事。对于这些可能会说当初需求定义的时候不是签字下来说是做成这样,怎么不是你想要的呢?问题可能会归根于与客户沟通的方式和手法上,但是对于需求的控制来说,对如何避免需求的反复,客户脑门一热就有新点子出来,还有许多不切实的要求等等,都在需求的控制范围内。

有些人会说我们和客户说好了,协议也签订说:除了纸上描述的东西之外,其余的都是变更追加。但是这个观点固然好,也是完全归于一方有利来考虑,而且有很多时候我们签署在合同内的需求文档也比较含糊,而且双方在问题的理解上可能会有歧义,一旦真正要将合同拿出来对峙的时候,我想彼此都很难说服对方。就像树上有十只鸟一样,没有说好环境,状态等等的假设,一切的结果应该说都可能是合理的。

如何控制需求,我想除了软件工程上提出的那些理论之外,也很难有新的观点,但是在实际的操作过程中,我们可能一方面要维护和客户的关系,另一方面也要考虑系统的开发时间和整体工数等等,做一个权衡。不过我个人更趋向使用问题具体化的方式来控制,尽量将能够想出的问题通通罗列出来和客户确认,同时采用换位思考的方式,尽量能够让客户理解我们所描述的系统的状况,如果在调研和需求的确认阶段能够把工作做得很好,在后期的开发过程中变更的内容就会比较少,变更的内容也就容易控制。

和客户进行良好的沟通,多为客户做一个考虑,避免将自己以一个高调姿态介入和客户的沟通中,说一些客户很难懂的专业术语,将客户喷的云里雾里,自以为自己的专业领域多么了不起,这种和客户的共通方式最容易造成需求空洞,后期翻盘的概率很高。如果客户不懂你口中所说的内容,可能问题出于客户,另外更大的程度出于你,我们需要考虑采用的沟通的方式以及内容是不适通俗易懂,能将复杂的问题讲的简单就表示你不简单。