首页 新闻 会员 周边 捐助

大牛们请进~关于在IIS7部署asp.net程序,以及调用后台指定程序的问题。困扰我三天了。

0
悬赏园豆:200 [已解决问题] 解决于 2009-08-11 04:53

我写了一个ACM online judge 网站。

asp.net 3.5 + .net framework 3.5 + Sql Server 2005 (C#语言)

该系统在进行判题的时候,调用了一个保存于硬盘的 "core.exe" 程序。

我用管理员账号“Administrator”在系统新建了一个“零权限”用户

 ---- 用户名:text, 密码“test”

(所谓“零权限”是指 test 用户不属于任何用户组, 比如它不属于“Administrators” , 不属于"Guests", )

如果用户提交了一段代码, 通过了编译。系统给它产生一个target.exe

随即启动“core.exe” ,core.exe根据运行参数里的零权限用户参数,利用零权限用户(“test”用户)启动target.exe。用于实时监测target.exe的内存使用、运行时间情况。target.exe是使用零权限用户 test启动的。

给“core.exe”设置一个运行参数, 参数如下:

FILE:"D:\target.exe"  USERNAME:"test"  PASSWORD:"test"

USERNAME 和 PASSWORD 的参数选项是用于启动运行target.exe的用户名和密码。

调用core.exe的C#代码如下:

            _process = new Process();
            _process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
            _process.StartInfo.UseShellExecute = false;
            _process.StartInfo.CreateNoWindow = false;
            _process.StartInfo.RedirectStandardOutput = true;
            _process.StartInfo.FileName = @"D:\core.exe";
            _process.StartInfo.Arguments = "FILE:\"D:\target.exe\"  USERNAME:\"test\"  PASSWORD:\"test\"";

            _process.Start();

            _process.WaitForExit();

            String result;
            result = _process.StandardOutput.ReadToEnd();

本地调试网站的时候,WebDev.WebServer.EXE(ASP.NET Development Server)是以 “Administrator” 系统管理员身份启动的。

该虚拟服务器在执行 "_process"对象所启动的程序(即" core.exe") 也是以“Administrator” 系统管理员身份启动运行的。core.exe 被启动之后, 根据参数以零权限用户“test”启动target.exe。

WebDev.WebServer.EXE  --- Administrator用户运行

core.exe   ----  Administrator用户运行

target.exe  ---- test用户运行

本地调试通过。 无任何异常。

 

但是网站系统被部署到IIS 上面后。可怕的结果出现了。

我在网站的“应用程序池 --> 高级设置 --> 进程模型 --> 标识”(应用程序池标识)设置为"Administrator"用户。

以期望:

"w3wp.exe" (IIS Worker Process)  --  Administrator用户运行

core.exe  -- Administrator用户运行

target.exe -- test用户运行

但是target.exe却无法被test用户运行,有一个WerFault.exe (Windows 错误报告)在后运行。无任何错误提示。

我的分析是: 通过IIS7 启动运行的 core.exe 无法让target.exe 被 test 用户执行。会产生Windows错误。 我又试着把 test 零权限用户添加到Administrators 用户组里面, 让 test 成为系统管理员。 结果还是一样, target.exe 无法正常被test用户运行。

最奇怪的事情来了,把core.exe的运行参数

由  FILE:"D:\target.exe"  USERNAME:"test"  PASSWORD:"test"

改成  FILE:"D:\target.exe"  USERNAME:"Administrator"  PASSWORD:"MyPassword"

即让target.exe 被 Administrator 系统管理员运行,居然可以运行成功了~ 。_ 。

但是在本地调试中, 不管参数是上面两者的哪一个, 都可以运行成功。

由于考虑到系统的安全性, 必须让target.exe 被 test 零权限用户运行。

这个问题困扰我三天了。感谢您看完这么长的问题, 同时希望您能给提供给我一些建议, 以及解决方法。

我的qq是 47985617

邮箱 47985617@qq.com

如果您知道如何解决问题, 请您联系并告诉我, 感激不尽。

谢谢您看完这个问题。

SunnyHong的主页 SunnyHong | 初学一级 | 园豆:0
提问于:2009-08-08 02:48
< >
分享
最佳答案
0

可能是不允许改变用户权限吧?你可以看一下系统日志,异常应该记录在系统日志中

收获园豆:100
cokkiy | 菜鸟二级 |园豆:410 | 2009-08-08 13:48
可能IIS真的是这样设定的, 但是IIS没有地方配置让它可以改变权限啊。。 郁闷啊 。。 谁来救救我。。。 ~~~~(>_<)~~~~
SunnyHong | 园豆:0 (初学一级) | 2009-08-08 14:20
其他回答(1)
0

尝试新建一个应用程序池,不要用Default Pool,之前在IIS 6 中有些时候发现默认的池不好用。

收获园豆:100
winzheng | 园豆:8797 (大侠五级) | 2009-08-08 15:04
我是新建的应用程序池, 但是关键不是应用程序池的问题. 是iis 的安全性能太强了. 没办法突破它. 问题已经发现了, 谢谢你.
支持(0) 反对(0) SunnyHong | 园豆:0 (初学一级) | 2009-08-11 04:52

@SunnyHong: 你是怎么解决的呢?

支持(0) 反对(0) 深山老林 | 园豆:222 (菜鸟二级) | 2013-12-11 12:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册