从我之前的问题Executing batch file in C# web service
开始我检查了所有相关内容的许可,发现:
批处理文件:权限=所有用户的完全控制
IIS user = myUser
.. win32 \ cmd.exe:系统权限,管理员,myUser =读取和执行,读取“TrustedInstaller”权限(这是什么?)=完全控制
Visual Studio在管理员模式下运行。
我在互联网上做了一些研究,似乎我需要在我的机器上使用“本地策略”做一些事情。不幸的是,我使用的是Windows Vista Home Premium,看起来我无法设置本地策略......我也尝试将cmd.exe的权限更改为“完全控制”,但它不允许我这样做。
看起来我正面临一个“无法解决的”问题,所以我会解释我在做什么,以便有人可以告诉我该怎么做。
我使用黑莓模拟器开发了Blackberry应用程序。它与我的网络服务在同一台PC上。
我在C#中开发了Web服务,发布在我的localhost中。
Blackberry app将文件上传到网络服务。 Web服务将文件存储在我的PC上。 (这部分没问题。)
我的电脑上有一个程序,我称之为myprogram.exe。该程序仅在dos上运行。该程序将使用命令myprogram.exe path \ oldfile.x path \ newfile.y将文件从一种文件类型转换为另一种文件类型.newfile.y将自动创建并存储在我的PC上。
我需要转换从BB发送的文件,现在存储在我的本地PC上,所以我写了一个包含dos命令的批处理文件。 Web服务应该执行批处理文件,但它不会。
如果我停止尝试使用批处理文件,有什么办法可以执行这些命令吗? (或者我可以运行该外部程序的任何方式)请给我一个想法。我在互联网上搜索过,但仍然没有任何想法。我现在不知道该怎么办。 T_T
PS。如果我的问题很愚蠢,请原谅我。我只是想尽一切可能让项目成功。
答案 0 :(得分:1)
我能想到的只有:
您的ASP.NET网站在DefaultAppPool下运行。 DefaultAppPool只有有限的权利。
从服务中执行批处理文件 创建一个新的应用程序池。
a)打开Internet信息服务管理器(IIS 7)。 您将找到Internet信息服务 Windows Vista开始菜单中的管理器。
b)在左侧的树中,右键单击“应用程序池” 并添加一个新的应用程序池。
c)选择新创建的应用程序池,然后单击 高级设置。
d)在身份下选择LocalSystem。
e)在树中选择您的网站(例如默认网站)。 选择基本设置并选择您创建的应用程序池。
f)重新启动您的网站(右键单击您的网站,在 管理您的网站选择重新启动)。
您应该能够执行批处理文件。 这是一个例子:
处理oProcess = new Process();
oProcess.StartInfo.UseShellExecute = false;
oProcess.StartInfo.WorkingDirectory = @“c:\ temp \ test”;
oProcess.StartInfo.FileName = @“c:\ windows \ system32 \ cmd.exe”;
oProcess.StartInfo.CreateNoWindow = true;
oProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
oProcess.StartInfo.Arguments = @“/ C c:\ temp \ test \ mybatch.bat”;
oProcess.Start();
但是,我不推荐这种做法。
重新思考你的设计。我建议使用托管在一个WCF服务 用于执行批处理文件的Windows服务。 然后从您的Web服务调用WCF服务来执行您的 像这样的批处理文件(伪代码):
var wcfClient = new ConverterServiceClient();
wcfClient.Convert(@“c:\ temp \ oldfile.x”,“c:\ temp \ newfile.y”);
//此处您的服务已使用您的应用程序转换了文件。
如果您与.NET Framework 2.0绑定,则可以托管 Windows服务应用程序中的.NET Remoting服务。
希望,这有帮助。