从ASP.NET应用程序执行进程时的目录注意事项?

时间:2014-03-27 23:17:45

标签: c# asp.net asp.net-mvc azure process

我有一个ASP.NET Web角色,它在调用特定Controller方法时生成的声音文件上运行音频效果实用程序。我完全理解如何使用Process对象来执行进程,设置工作目录,等待退出,并检查退出代码。

以下是我的具体问题:

  • 如果我在我的ASP.NET项目的文件夹中有EXE文件及其依赖项,我需要做什么,以便在Web角色发布到的时将它们放在非公共目录中Azure的?或者他们是否作为已发布包的一部分复制到网站?如果是这样,我如何获得EXE文件的最终位置?我假设我不能通过一个朴素的" //。exe"来引用EXE。路径。换句话说,我需要知道如何处理EXE文件和依赖项(如果有的话),以便它正确运行,我还需要知道我将在已发布的目录结构中找到它,以便我可以通过info对Process对象的StartInfo属性。

  • 是否需要更改我需要进行的web.config文件更改或目录权限设置我需要更改才能使其正常工作?

注意:由于可伸缩性和超时问题,我知道从ASP.NET线程运行进程的注意事项:

Launching new process from ASP.NET

但是,大多数情况下,实用程序不需要运行,因为Controller方法返回的大多数声音文件已经生成并且正从数据库中的BLOB字段中提取。此外,我已经对转换进行了定时,使用单个核心在最坏情况下运行大约需要200到500毫秒。

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是:

  1. 将所有EXE和相关文件放入一个文件夹(比如'MyFolder')
  2. 将文件夹作为项目的一部分,以便发布系统将其复制为普通文件。
  3. 具有以下web.config条目。这样可以确保没有人可以从外部访问该文件。
  4. 在您的代码中,您始终可以使用Server.MapPath来访问进程类使用的EXE路径等。
  5. <location path="MyFolder">
         <system.web>
           <authorization>
             <deny users="*"/>
           </authorization>
         </system.web>
    </location>
    

    可能有其他方法阻止通过以下方式访问此文件夹:

    1. Url重写规则,以便只允许您网站的http_referrers访问它们。即没有直接的链接。
    2. http handlers等。