【发布时间】:2016-11-02 17:26:28
【问题描述】:
当我从 asp.net 应用程序启动控制台应用程序并设置 UseShellExecute = False 时,我收到错误:
未处理的异常:System.IO.FileLoadException:无法加载 文件或程序集 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 或其依赖项之一。一个 尝试引用不存在的令牌。 (例外 来自 HRESULT:0x800703F0)
但是当我使用 UseShellExecute = True 启动它时,它可以工作。 asp.net 和控制台应用程序都使用 .net 4.6.1。 EntityFramework.dll 和 EntityFramework.SqlServer.dll 与控制台应用程序位于同一文件夹中。
我已经尝试了所有方法,但到目前为止无法摆脱错误。我更喜欢 UseShellExecute = False 以便我可以将输出重定向到 asp.net 应用程序。它似乎找不到 dll,但它应该是因为它是同一个文件夹。
这是我正在使用的代码示例:
Dim filename As String = "C:\apps\test.exe"
Dim filepath As String = Path.GetDirectoryName(filename)
Dim proc = New Process() With {
.StartInfo = New ProcessStartInfo() With {
.FileName = filename,
.WorkingDirectory = filepath,
.UseShellExecute = False,
.RedirectStandardOutput = True,
.RedirectStandardError = True,
.CreateNoWindow = True
}
}
【问题讨论】:
-
为什么要从 Web 应用程序内部启动可执行文件?这是一个非常严重的性能和安全问题。这意味着多个进程可以仅仅因为页面刷新而启动,并且任何可以破解该网站的人都可以运行他想要的任何可执行文件
-
如果你想从一个网站运行一个长时间运行的工作,使用 Hangfire 之类的东西
-
感谢您提供的信息,但对于我的情况来说,Hangfire 似乎有点矫枉过正。这是一个内部网络应用程序,所以我们不担心黑客攻击。控制台应用程序大约需要 20-30 才能完成,而且他们每周只运行大约 1 次。我将对此进行调查,作为另一种选择。
-
即 20-30 秒。
标签: asp.net vb.net entity-framework