QUOTE(dujuan509 @ 2005年06月11日 12时29分)
可以使用
nsexec::exectostack "net start/stop/pause"
Pop $0
messagebox mb_ok "return:$0"
可以通过返回值判断用户是否足够权限,或者是否超时。
如果返回0,表示执行成功,为1或其他,则失败。
[snapback]217484[/snapback]
还好,不过不知道为什么,自上次作了个 SQLServer 的连接例子之后,我就不喜欢调用控制台程序了,实在是没有一个安装程序的整体感觉,如果因为某些原因,未能访问到这个控制台程序(我觉得调用一个API比调用一个控制台程序要好得多,至少API是调用一个系统DLL,这是必须存在的东西,没有的话,系统就会有问题,而一个控制台程序,因为某些原因被删除了,系统是仍然能够运行的。而且使用控制台程序要依附更多的条件,例如系统的搜索路径出现问题,会令到安装程序出现调用失败),很可能出现某些问题,再者,插件除了调用是否失败的标识外,最重要的是服务状态,可以非常清晰的显示该服务的状态。
----以上只是个人的编程爱好习惯,如果别人仍然喜欢调用外部程序,我也没办法了。
/* Service Types (Bit Mask) */
#define SERVICE_KERNEL_DRIVER 0x00000001
#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
#define SERVICE_ADAPTER 0x00000004
#define SERVICE_RECOGNIZER_DRIVER 0x00000008
#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
SERVICE_FILE_SYSTEM_DRIVER | \
SERVICE_RECOGNIZER_DRIVER)
#define SERVICE_WIN32_OWN_PROCESS 0x00000010
#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
SERVICE_WIN32_SHARE_PROCESS)
#define SERVICE_INTERACTIVE_PROCESS 0x00000100
#define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
SERVICE_ADAPTER | \
SERVICE_DRIVER | \
SERVICE_INTERACTIVE_PROCESS)
/* Start Type */
#define SERVICE_BOOT_START 0x00000000
#define SERVICE_SYSTEM_START 0x00000001
#define SERVICE_AUTO_START 0x00000002
#define SERVICE_DEMAND_START 0x00000003
#define SERVICE_DISABLED 0x00000004
/* Error control type */
#define SERVICE_ERROR_IGNORE 0x00000000
#define SERVICE_ERROR_NORMAL 0x00000001
#define SERVICE_ERROR_SEVERE 0x00000002
#define SERVICE_ERROR_CRITICAL 0x00000003
/* Service State -- for CurrentState */
#define SERVICE_STOPPED 0x00000001
#define SERVICE_START_PENDING 0x00000002
#define SERVICE_STOP_PENDING 0x00000003
#define SERVICE_RUNNING 0x00000004
#define SERVICE_CONTINUE_PENDING 0x00000005
#define SERVICE_PAUSE_PENDING 0x00000006
#define SERVICE_PAUSED 0x00000007