asp.net使用process.start调用exe程序问题

dongshanyu 2012-10-22 10:55:39
xp/net 1.1/服务器端执行
process.start("c:\\windows\\notepad.exe")
控制台程序可成功调用出Notepad;但在asp.net中调用却发现问题,
process.start的返回值为true,在任务管理器的进程中也发现Notepad.exe,可就是没执行(此处即Notepad没显示)

网上找了一下,类似情况,大多人提到是安全与权限问题

也有人建议对 IIS Admin 重新设定,并对machine.config进行修改,如下:
http://liu765023051.blog.163.com/blog/static/132912267201261785452133/
但结果无效

有谁知道问题在哪?若是权限问题,该如何设置?
...全文
671 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongshanyu 2012-10-25
  • 打赏
  • 举报
回复
haukwong,等正式部署到时,我会按你的方法尝试的,谢谢。

WinXP下,我目前找到的方法是,把网站的执行权限,由"纯脚本",调整到"脚本与可执行文件",这样可以达到目的,只是这样安全性方面可能会有些问题。
Hauk 2012-10-25
  • 打赏
  • 举报
回复
这肯定是权限问题了。
我试了一下,只要一发布到IIS,就会报异常。System.ComponentModel.Win32Exception: 拒绝访问。

我是用的win7 x64,给文件设置了Everyone完全控制,并共享都不行。


正确的做法是:
1、打开IIS管理界面
2、选择“应用程序池”
3、选择你发布网站所用的“应用程序池”-->右键(高级设置)
4、进程模型节点-->标识-->设置-->自定义帐户-->输入一个个人用户的帐号和密码
5、一路确定-->OK

当然你也可以单独创建一个新的应用程序池来做如上设置
woof_1128 2012-10-25
  • 打赏
  • 举报
回复
没有指定服务器上的个文本文件
dongshanyu 2012-10-25
  • 打赏
  • 举报
回复
补充说明一下:



To devmiao
是否能看到界面并不重要,在被调用的exe程序中有记录操作日志,因为没有获得其日志文件,所以才确定程序被调用了,但没有被执行。

To wuyq11
>修改应用程序池,设置属性-标识为本地系统
测试用的环境是XP,真实现场环境将为Win7;
因为目前还在xp环境下测试,所以尚不能确定此法是否有效;等部署到真实环境后再追加确认。

To findcaiyzh
抱歉,举的例子不太好,实际上,Notepad.exe只是代指一个exe程序,不是真要打开一个记事本程序。

To haukwong
被调用的exe程序是存放在服务器端的


Hauk 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

可以运行,但是你在桌面看不到,要明确两点,一个是asp.net是在系统账户,而不是你桌面登录的账户运行程序的,所以看不到界面,另一个是,你用process.start事实上是在服务器上运行(可能你调试的时候客户端、服务器是一台电脑,但是实际运行不是),也就是你不能用任何办法去执行客户机上的程序。
[/Quote]

这个是正解。
在web服务端执行process.start("c:\\windows\\notepad.exe")你是不可能看到界面的。
windows是多用户的系统,你当前用户无法看到其他用户启动的进程(IIS使用的用户和你登录电脑的用户不一样)

如果你想实现,打开你的网页,打开一个记事本的话,需要使用脚本语言来实现。在服务端打开是没有用的。
例如:

<script language="javascript" type="text/javascript">
var myshell = new ActiveXObject( "WScript.shell" );
myshell.Run('notepad');
</script>
宝_爸 2012-10-23
  • 打赏
  • 举报
回复
在服务器上运行Notepad干什么?
wuyq11 2012-10-23
  • 打赏
  • 举报
回复
修改应用程序池,设置属性-标识为本地系统
或模拟本地用户
devmiao 2012-10-22
  • 打赏
  • 举报
回复
可以运行,但是你在桌面看不到,要明确两点,一个是asp.net是在系统账户,而不是你桌面登录的账户运行程序的,所以看不到界面,另一个是,你用process.start事实上是在服务器上运行(可能你调试的时候客户端、服务器是一台电脑,但是实际运行不是),也就是你不能用任何办法去执行客户机上的程序。

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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