问题是这样的:
环境:windows xp + Asp.Net + C#
我想在客户端调用服务器端的一个执行程序,该执行程序有两个参数,执行后会生成一个结果文件然后自动退出该执行程序
调用执行程序的代码如下:
string par2 = -x";
string par3 = "InFile.Dat";
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
Info.FileName = "GOTO.exe";
Info.WorkingDirectory = "\\F:\\GOTO";
Info.Arguments = String.Format("\"{0}\" \"{1}\"", par2, par3); Info.CreateNoWindow = false;
Info.Verb = "open";
Info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
Info.UseShellExecute = true;
System.Diagnostics.Process.Start(Info);在C#环境下运行,能顺利调用这个执行程序并生成结果文件并自动退出(页面是http://localhost:21863/Sur_Main.aspx)
但是如果在浏览器(IE)上用http://127.11.11.11/Sur_Main.aspx运行时(127.11.11.11代表服务器地址),只能在服务器的任务管理器->进程上看到所调用的执行程序GOTO.exe,但是没有生成结果文件,也不自动退出.这是为什么呢?请各位大虾不吝赐教!要调用的执行程序及结果文件都放在虚拟目录下,对虚拟目录设置了读取+写入+记录访问+索引资源+脚本和可执行文件(是在Internet 信息服务里设置的)
环境:windows xp + Asp.Net + C#
我想在客户端调用服务器端的一个执行程序,该执行程序有两个参数,执行后会生成一个结果文件然后自动退出该执行程序
调用执行程序的代码如下:
string par2 = -x";
string par3 = "InFile.Dat";
System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
Info.FileName = "GOTO.exe";
Info.WorkingDirectory = "\\F:\\GOTO";
Info.Arguments = String.Format("\"{0}\" \"{1}\"", par2, par3); Info.CreateNoWindow = false;
Info.Verb = "open";
Info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
Info.UseShellExecute = true;
System.Diagnostics.Process.Start(Info);在C#环境下运行,能顺利调用这个执行程序并生成结果文件并自动退出(页面是http://localhost:21863/Sur_Main.aspx)
但是如果在浏览器(IE)上用http://127.11.11.11/Sur_Main.aspx运行时(127.11.11.11代表服务器地址),只能在服务器的任务管理器->进程上看到所调用的执行程序GOTO.exe,但是没有生成结果文件,也不自动退出.这是为什么呢?请各位大虾不吝赐教!要调用的执行程序及结果文件都放在虚拟目录下,对虚拟目录设置了读取+写入+记录访问+索引资源+脚本和可执行文件(是在Internet 信息服务里设置的)
文件夾權限? 怎么设?
1)右键那个文件夹--属性--安全--添加(如果没有安全:系统菜单--工具--文件夹选项--查看,去掉"使用简单文件共享"前的勾)
2)--高级
3)--立即查找;找到IUSR_(服务器的机器名)---确定---确定
4)在"INTERNET 来宾账户的权限"下,勾上"修改"--确定
试一下吧
TO toury: 文件存放的文件夹访问权限放开给INTERNET匿名用户,是在Internet信息服务里设置的,但是没有.是否因为和你的方法有所不同?
To anncesky,Wo_You_Xie_SHang_Xin: 我试试两位的方法
你用的是NTFS格式吧?因为NTFS格式的ACL缘故,要设置一下那个文件夹的ACL访问权限;
IIS里设置的是INTERNET匿名用户是否可以访问你的网站;而ACL设置的是用户是否可以操作某文件;
在.NET的IDE里你编译的时候用户不是匿名而是.NET用户,所以可以操作那个结果文件;
但换了浏览器访问后就产生了匿名用户文件访问权限的问题了.
你可以做一个测试:
在WEB.CONFIG里更改一下用户验证,只允许WINDOWS验证的用户进入网站;如果可以操作结果文件,那就是这个原因了
--------------------
我只是推断,你试一下看吧,呵呵
To toury:
我按你说的做了,页面、被调用的执行程序、结果文件都放在同一个虚拟目录下,对该目录把 INTERNET 来宾账户 及 ASPNET账户的权限都设置的足够大(只除了没有最后一个特别的权限),还有这两个账户我都把它加到了Administrators组, 但还是不行啊
我看了一下,在服务器的任务管理器-> 进程中,当在C#环境中运行时执行程序GOTO.exe所对应的用户是administrator,当在客户端浏览器中调用时执行程序GOTO.exe所对应的用户是AspNet
哎,我都快做不下去了,toury兄,救救我吧
.net是2.0,你是说要把 INTERNET 来宾账户换成network servies用户吗?
你不要着急,先用WINDOWS集成验证身份通过浏览器访问服务器,具体就是IIS里设置一下,暂时把匿名用户去掉,保留WINDOWS集成验证;看看是不是可以操作那个结果文件;
如果是,那就肯定是权限问题,再想办法解决---总会有办法的
谢谢你给我信心!我会按你的方法再试一试,仔细再想想。你说的“GOTO.exe里最好不要有UI元素”是什么意思?
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
To toury:调用的执行程序有界面元素,这个没有办法改变
-----------
你是否给了足够的权限?????
你不防试试用everyone的读写权限,就全部权限好了
我自认为是给了足够的权限:在Internet信息服务里设置了虚拟目录的写入权限,在文件夹里也给了权限(除了特别权限).不知道这样算不算足够?
To shawn_yang: "将winnt/temp目录设置everyone 完全控制",这个是为什么?
包括C:\windows\temp和.net临时目录、虚拟路径等。
还有仔细看看你的IIS设置
XD们,祝贺我吧!
我今天用CB新做了一个简单的执行文件,有一个简单界面,功能就只读一个文件然后再写到另一个文件,在浏览器里调用这个服务器执行程序,成功,结果文件写出来了!
刚开始是把everyone,internet匿名用户,ASPNET用户都给了全部权限,而且internet匿名用户,ASPNET用户都加在Administrators组里,windows及.net临时目录也给了权限,在浏览器里调用成功。后来我把everyone,internet来宾用户,ASPNET用户的特别权限都删除只保留读取与运行权限,从Administrators组里删除了internet匿名用户、ASPNET用户,在浏览器里调用也成功了。
我想目前的服务器配置对于%POST http://forum.csdn.net/PointForum/Forum/ReplyA�该没问题了,那么为什么我实际想要调用的那个执行程序GOTO.exe还是不成功呢?肯定是它还做了其它的什么操作我没弄清楚,说到底可能也还是权限问题吧,这个执行程序有点复杂,安装时修改了多项注册表,也有点大,本身带有配置文件及一堆DLL。目前是什么问题导致还不明白,期待XD们继续关注!
无论如何,谢谢各位的鼎力相助,虽然问题还没完全解决,但我现在非常开心,套用 toury兄的一句话:问题总有办法解决的。为我开心吧!
我想目前的服务器配置对于读文件和写文件应该没问题了,那么为什么我实际想要调用的那个执行程序GOTO.exe还是不成功呢?肯定是它还做了其它的什么操作我没弄清楚,说到底可能也还是权限问题吧,这个执行程序有点复杂,安装时修改了多项注册表,也有点大,本身带有配置文件及一堆DLL。目前是什么问题导致还不明白,期待XD们继续关注!
哈哈,我这个人比较懒,最主要的是在这个极度阳盛阴衰的行业里我有点自卑,各位XD们都是强人
用资源查看软件看看GOTO.EXE里都有些什么东东...得出结论普通用户是否有可能运行它;然后在WEB.CONFIG里动动脑筋吧;
iusr_计算机名 这个用户不是guest吗?
谢谢你哟!我试试
To fcuandy:
不是吧?!有一个专门的guest用户,和iusr_计算机名用户是两个不同的用户,我的是XP系统,也许我的系统和你的不一样
有关如何加密保存帐号和密码的信息可以查看 net 文档或发帖询问。
有关如何加密保存帐号和密码的信息可以查看 net 文档或发帖询问。
修改的.............
To shawn_yang: 你是说让我把页面里的有关goto的代码部分注释掉来调试吗?
To fcuandy: 你说"这个问题,你不用理思路了. guest 可以有服务器上exe的执行权限. 太可怕了.",你是说这个解决方案本身就有问题是吗?安全性太差?执行程序是个第三方软件,这个解决方案是项目长决定的,因为时间有点紧,我只是听命行事,再加上目前我也没有别的什么好方案提出来,所以先把这个方案完成再说吧
输入下列内容(注意CSDN不再引号前加空格):<?xml version="1.0"?>
<configuration> <system.web> <authentication mode="Windows"/>
<identity impersonate="true"/> </system.web>
</configuration>
你说的这个方法我没有办法实现,因为执行程序是买来的,我没办法对它的原码做任何操作
<?xml version="1.0"?>
<!--
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在
machine.config.comments 中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings/>
<system.web>
<!--
设置 compilation debug="true" 将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
<compilation debug="true"/>
<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,
以标识传入的用户。
-->
<authentication mode="Windows"/>
<identity impersonate= "true"/>
<!--
如果在执行请求的过程中出现未处理的错误,
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置
要显示的 html 错误页
以代替错误堆栈跟踪。 <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
</system.web>
</configuration>To r_swordsman:好象就比你贴出来的多个调试
修改 Sur_Main.aspx ,在 Sur_Main.aspx 操作 F:\GOTO 目录,看是否也写权限
你说"在 Sur_Main.aspx 操作 F:\GOTO 目录,看是否也写权限",我没明白你的意思
System.Diagnostics.Process.Start 创建的进程的身份是从创建他的父进程继承的
那它的父进程的使用什么身份呢? 也就是 w3wp.exe...是哟任务管理器就可以看出来啦我是2003...帐号是 NETWORK SERVICE ...XP系统可能不一样然后确保你那目录 NETWORK SERVICE 有足够的权限就可以了试试
System.Diagnostics.Process.Start 创建的进程的身份是从创建他的父进程继承的那它的父进程的使用什么身份呢? 也就是 w3wp.exe...在任务管理器中就可以看出来啦我是2003...帐号是 NETWORK SERVICE ...XP系统可能不一样然后确保你那目录 NETWORK SERVICE 有足够的权限就可以了试试
好的,我试试
根据toury 和r_swordsman两位的建议, 我用一个查资源(/动作/调用哪些程序)的东东发现那个执行程序真的有做另外的一些动作, 然后还是在config里面作了一个用户模拟,做成了.
我试了一下, 执行程序所在目录匿名用户和aspnet用户都不用给最大权限,就只保留读取与运行权限即可,everyone 用户也可以不用加.
我想config配置文件有很大的操作空间, 不过这里面有个安全问题要考虑, 这也是我下一步要考虑的问题
我记得你在我有关这个问题的另一个贴子:http://topic.csdn.net/u/20071101/11/b1286167-422a-4b65-b441-c146729c5d9f.html里作过回复,因为这个贴子分不够,就请你到另外的这个贴子领分,可好?
To shawn_yang:
因为这个贴子分不够,就请你到我有关这个问题的另一个贴子:http://topic.csdn.net/u/20071101/11/b1286167-422a-4b65-b441-c146729c5d9f.html里领分,好吗?
多谢两位!