用ASP 启动服务器上的某一程序(notepad.exe)付源代码!!怎会不行??高手来吧!!!

acheng 2002-01-08 05:57:32
问题1:notepad.exe 为什么不会运行?
问题2:如果服务器上有运行notepad.exe 而且窗口名字是“未定标题 - 记事
本”, 那为什么不会关闭notepad.exe

在asp 文件中
set r = server.createobject("mypro.closeexe")
r.restart
set r = nothing

在.cls 文件中
Option Explicit

Public Function Restart()
Execute "c:\winnt\system32\notepad.exe", Priority '强制启动
End Function

Public Function terminate()
terminatekhan '注销
End Function

在.bas文件中

Option Explicit

' ==========================================================
' = Process =
' ==========================================================

Private Const CREATE_NEW_CONSOLE = &H10
Private Const CREATE_NEW_PROCESS_GROUP = &H200
Private Const CREATE_SUSPENDED = &H4
Private Const DEBUG_PROCESS = &H1
Private Const DEBUG_ONLY_THIS_PROCESS = &H2
Private Const DETACHED_PROCESS = &H8
Private Const INFINITE = &HFFFF

Private Const MAX_PATH = 260

Private Const HIGH_PRIORITY_CLASS = &H80
Private Const IDLE_PRIORITY_CLASS = &H40
Private Const NORMAL_PRIORITY_CLASS = &H20
Private Const REALTIME_PRIORITY_CLASS = &H100

Private Const SYNCHRONIZE = &H100000

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long

Private Declare Function CreateProcess Lib "kernel32" _
Alias "CreateProcessA" _
(ByVal lpApplicationName As String, _
ByVal lpCommandLine As String, _
ByVal lpProcessAttributes As Long, _
ByVal lpThreadAttributes As Long, _
ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, _
ByVal lpEnvironment As Long, _
ByVal lpCurrentDriectory As String, _
lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long

Private Declare Function GetLastError Lib "kernel32" () _
As Long

Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Private Declare Function WaitForInputIdle Lib "user32" _
(ByVal hProcess As Long, _
ByVal dwMilliseconds As Long) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

' ==========================================================
' = Run the program associated with a file =
' ==========================================================

' Error conditions
Private Const ERROR_BAD_FORMAT = 11&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const SE_ERR_ACCESSDENIED = 5
Private Const SE_ERR_ASSOCINCOMPLETE = 27
Private Const SE_ERR_DDEBUSY = 30
Private Const SE_ERR_DDEFAIL = 29
Private Const SE_ERR_DDETIMEOUT = 28
Private Const SE_ERR_DLLNOTFOUND = 32
Private Const SE_ERR_FNF = 2
Private Const SE_ERR_NOASSOC = 31
Private Const SE_ERR_OOM = 8
Private Const SE_ERR_PNF = 3
Private Const SE_ERR_SHARE = 26

' ShowCmd values
Private Const SW_HIDE = 0
Private Const SW_MINIMIZE = 6
Private Const SW_RESTORE = 9
Private Const SW_SHOW = 5
Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMINNOACTIVE = 7
Private Const SW_SHOWNA = 8
Private Const SW_SHOWNOACTIVATE = 4
Private Const SW_SHOWNORMAL = 1

Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Declare Function FindExecutable Lib "shell32.dll" _
Alias "FindExecutableA" _
(ByVal lpFile As String, ByVal lpDirectory As String, _
ByVal lpResult As String) As Long

Private FName As String
Private LastErr As Long
Private ProcId As Long
Private ProcessPriority As Long

Public Property Get ProcessId() As Long

ProcessId = ProcId

End Property

Property Get Error() As Long

Error = LastErr

End Property

Public Property Get FileName() As String

FileName = FName

End Property

Public Property Let FileName(FileName As String)

FName = FileName

End Property

Public Property Get Priority() As Long

Priority = ProcessPriority

End Property

Public Property Let Priority(a As Long)

If a = NORMAL_PRIORITY_CLASS Or _
a = IDLE_PRIORITY_CLASS Or _
a = HIGH_PRIORITY_CLASS Then

ProcessPriority = a

End If

End Property

Public Sub Execute(Optional FileName As String, Optional Priority As Long)

Dim p As PROCESS_INFORMATION
Dim s As STARTUPINFO
Dim pHandle As Long
Dim r As Long

s.cb = Len(s)
s.dwFlags = 0
s.lpDesktop = vbNullString
s.lpReserved = vbNullString
s.lpTitle = vbNullString

If Not IsMissing(FileName) Then
FName = FileName
End If

If Not IsMissing(Priority) Then
If Priority = NORMAL_PRIORITY_CLASS Or _
Priority = IDLE_PRIORITY_CLASS Or _
Priority = HIGH_PRIORITY_CLASS Then

ProcessPriority = Priority

End If
End If

LastErr = 0

r = CreateProcess(FName, vbNullString, 0, 0, True, _
ProcessPriority, 0, vbNullString, s, p)
If r <> 0 Then
r = CloseHandle(p.hThread)
If r <> 0 Then
r = WaitForInputIdle(p.hProcess, INFINITE)
r = CloseHandle(p.hProcess)

End If
Else
LastErr = GetLastError()

End If

ProcId = p.dwProcessId

End Sub

Public Sub terminatekhan()
Dim winHwnd As Long
Dim RetVal As Long
Dim terminatekhan As String

winHwnd = FindWindow(vbNullString, "纸牌")

If winHwnd <> 0 Then
RetVal = PostMessage(winHwnd, &H10, 0&, 0&)
If RetVal = 0 Then
terminatekhan = "关闭计算器出错!"
Else
terminatekhan = "关闭OK"
End If
Else
terminatekhan = "关闭计算器出错!"
End If
End Sub

Private Sub Class_Initialize()

LastErr = 0
ProcessPriority = NORMAL_PRIORITY_CLASS

End Sub



...全文
302 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolbel 2002-01-09
  • 打赏
  • 举报
回复
Perfect!
liloliu 2002-01-09
  • 打赏
  • 举报
回复
to mkiss(小kiss):
高手呀!厉害。文章来源可以公布吗?
mkiss 2002-01-09
  • 打赏
  • 举报
回复
关于在浏览器中执行*.exe文件的深入探讨!

关键词:ASP

一:真的能在浏览器中执行命令文件吗?
答案是肯定的。(哇,酷耶!可以......)不过先别高兴,只能执行服务器端的,而且是必须经过授权的。否则服务器想黑你就太容易了。谁敢看我我就格式化谁。(真希望可以,老是黑客黑服务器,也该服务器黑别人了。哈哈!)

二:他是如何实现的。是靠asp文件吗?
在服务器端执行文件是靠SSI来实现的,SSI时服务器端包含的意思(不是SSL),我们经常使用的#include 就是服务器端包含的指令之一。不过,这次要介绍的就是---------#exec。就是他可以实现服务器端执行指令。
不过,这次他不能用于.asp的文件。而只能用.stm、.shtm 和 .shtml这些扩展名。(很熟悉吧)而能解释执行他们的就是Ssinc.dll。所以,你写好的代码必须保存成.stm等格式才能确保服务器能执行。

三:如何执行呢?
终于开始讨论实质性问题了。
它的语法是:<!-- #exec CommandType = CommandDescription -->
CommandType是参数,他有两个可选类型:
1.CGI 运行一个应用程序。如 CGI 脚本、ASP 或 ISAPI 应用程序。
CommandDescription 参数是一个字符串。此字符串包含应用程序的虚拟路径, 后跟一个问号以及传送给应用程序的任一参数,参数之间由加号分隔 (+)。

他可是#exec命令最有用的参数,也是#exec命令存在的大部分理由。他可以处理已授权的CGI脚本,或Isapi应用程序。微软为了向下兼容一些早期的ISAPI应用程序,而创建了该项命令。我们知道,微软早期的WEB应用程序都是靠ISAPI解释的,而且也兼容CGI程序。你现在也可以在你的WEB根目录中找到CGI-BIN的目录。
我们可以用一下例子说明。
<!-- #exec cgi="/CGI-BIN/chat.exe?user+passw" -->
这种命令我们在一些UNIX主机上可以经常见到。现在,我们也可以在自己的.shtml中运用他了。当然,如果服务器允许的话。
还有一种类型的程序:
<!-- #exec cgi="/CGI-BIN/login.dll?name" -->
这种命令方式将启动一个进程外的程序来解释并动态输出信息到网页上。这种方式不常见。但你仍然可以在一些网站中见到。

2.CMD参数。
他可是#exec命令中最可怕的参数,也是#exec命令禁止使用的大部分理由。他也是我们一些网友实现最终幻想的利器。可惜。要得到我们幻想的招数有些困难(如de...,fo....)。也几乎是不可能的。
一下是微软关于CMD参数的说明,你一定要读明白在试!
CMD 运行 shell 命令。 CommandDescription 参数是一个字符串,其中包含 shell 命令程序的完整物理路径,后跟由空格分隔的任何命令行参数。如果没有指定全路经, Web 服务器将搜索系统路径。默认情况下,该指令是被禁用的,这是因为它会对 Web 站点造成安全方面的危险;例如,用户可能使用 format 命令格式化您的硬盘。
我本人建议关闭,因为现在微软也不推荐用这个命令。
不过,如果你是服务器的管理员,可以试一试。
你可以新建一个test.shtml的文件。
然后在首行设置一个命令。
<!--#exec cmd="c:\winnt\system32\help.exe" --> 'NT中的一个帮助文件(没有危险)。
或试一试!
<!--#exec cmd="c:\windows\command\mem.exe" --> 'window98下的显示内存的一个命令。(没有危险)

然后你在该虚拟目录中将其权限设为脚本,或可执行。

最后,你可以在浏览器中输入该地http://localhost/xxx/test.shtml
如果你看到浏览器中显示了他们的屏幕输入信息。那么,恭喜你。你试成功了。

四:最终幻想!(最好不要试。如果出了问题与本人无关!本人也不解答相应的问题)

如果我们想执行多的命令呢?那么闭上眼,往下看吧
首先,你打开注册表编辑器(记住要先备份),然后找
KEY_LOCAL_MACHINE\SYSTEM
\CurrentControlSet
\Services
\W3SVC4 '也可能是w3svc
\Parameters
选择新建一个Dword值
SSIEnableCmdDirective
它的两个值为0,1。下面是微软的说明。
服务器端的 #exec cmd 命令包括可执行外壳命令。安全意识强的站点希望通过将此值设置为 0 来关闭 #exec cmd 命令,并以此作为外加的安全防范,尤其是在允许不受信任的使用者将文件放置到服务器时更是如此。默认状态下,注册表中不存在此值;要允许该命令执行外壳命令,必须先创建此值并将值设置为 1 。


还可以在添一个Dwordd值
AllowSpecialCharsInShell
它的两个值为0,1。下面是微软的说明。
范围: 0, 1
默认值: 0 (禁用)
本值控制在运行批处理文件( .bat 和 .cmd 文件)时,是否允许在命令行使用 [ ¦ ( , ; % < > ] 等 Cmd.exe 特殊字符。这些特殊字符可能引发严重的安全隐患。 如果该项值设置为 1,心怀叵测的用户可以在服务器上随意执行命令。因此,强力推荐用户保留其默认设置 0。默认情况下,这些特殊字符不能传递到脚本映射 CGI 程序。如果设置为 1,除了管道符号 ¦ 和标准 I/O 重定向符(< 和 >)之外(这两类字符在命令处理器中具有特殊含义),这些特殊字符都能够传递到脚本映射 CGI 程序。

哈哈,下面我就不详述了。
不过你要执行一些你希望的命令可不是这么简单
(如:<!--#exec cmd="c:\winnt\system32\format.com /y a:" -->)
你不会成功的,如果死机不要怨我
lanying 2002-01-09
  • 打赏
  • 举报
回复
这几个问题比较有难度,研究中...
acheng 2002-01-09
  • 打赏
  • 举报
回复
再也没有会了

靠人不如靠自己
acheng 2002-01-09
  • 打赏
  • 举报
回复
上述问题我解决了:

但最後出现:

服务器对象 错误 'ASP 0178 : 80070005'

Server.CreateObject 访问错误

/index.asp,行3

检查权限时Server.CreateObject 的调用失败。对此对象的访问被拒。


救我!!!!!!!!!

ar7_top 2002-01-09
  • 打赏
  • 举报
回复
┏━━━━━━━━━━━━━━━┓
┃               ┃
┃Good Good Study┃
┃ Sky  Sky  Up  ┃
┃               ┃
┗━━━━━━━━━━━━━━━┛
jadesun 2002-01-09
  • 打赏
  • 举报
回复
关注,做个记录
acheng 2002-01-09
  • 打赏
  • 举报
回复
to all :

所有的类模块源代码在vb 中引用,能过启动notepad.exe ,而且也能弹出notepad 新窗口,当调用terminatekhan是,通过取得窗口名字从而获得进程id ,最后关闭notepad窗口删除进程

问题:当将上述程序,编成dll 用asp 创建实例,能在进程管理器中看到notepad进程的运行,但服务器上不会弹出notepad的新窗口,从而导致无法用terminatekhan关闭,进程


请问如何解决????
jsidiot 2002-01-09
  • 打赏
  • 举报
回复
well
wwwfwww 2002-01-08
  • 打赏
  • 举报
回复
靠.
asp怎么那么复杂了.看不懂.....?????
那些是什么东西???
ohno 2002-01-08
  • 打赏
  • 举报
回复
到是什么西东啊?
netying 2002-01-08
  • 打赏
  • 举报
回复
关注以下
guiguai 2002-01-08
  • 打赏
  • 举报
回复
关注一下
yxh_yzh 2002-01-08
  • 打赏
  • 举报
回复
你在服务器上运行吧
应该考虑iis的执行的进程内和进程外的程序执行问题
我用的word也不可以
可以考虑用asp.net
KnowLittle 2002-01-08
  • 打赏
  • 举报
回复
有点意思,
虽然不懂,赫赫
一点建议:调的时候,把程序改成最简单的,看哪里出错
希偌 2002-01-08
  • 打赏
  • 举报
回复
有权限吗?

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧