C#web服务运行批处理文件还是dos命令?

时间:2011-08-14 16:10:26

标签: c# web-services batch-file cmd

从我之前的问题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。如果我的问题很愚蠢,请原谅我。我只是想尽一切可能让项目成功。

1 个答案:

答案 0 :(得分:1)

我能想到的只有:

  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();

    但是,我不推荐这种做法。

  2. 重新思考你的设计。我建议使用托管在一个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服务。

  3. 希望,这有帮助。