VB.NET(WCF) - > CMD文件 - >第三方应用程序

时间:2011-05-24 16:57:18

标签: vb.net wcf cmd call

我有一个驻留在服务器上的自托管WCF服务(VB)。这个服务有一个方法,我从另一个应用程序调用,它应该启动一个调用第三方程序的.cmd文件。

我的WCF使用了旧的Shell()命令和Process()对象。两者都可以调用.cmd文件(位于服务器的本地驱动器上)。 .cmd文件如下所示:

echo Before calling 3rd party app >> C:\HelloFubar.txt
cd C:\Program Files\Exstream\Dialog 6.1
Engine -CONTROLFILE=C:\Exstream\Development\LetterWriter\Control Files\Letter.opt
echo After calling 3rd party app >> C:\HelloFubar.txt

现在我知道.cmd文件(保存为Letter.cmd)正在触发,因为当我在测试我的应用程序后检查txt文件时,已经编写了before / after语句。但是,第三方应用程序无法启动。

现在奇怪的部分 - 如果我从资源管理器中双击cmd文件,测试语句将写入文本文件并且第三方应用程序启动。运行得很好。

我已经仔细检查了应用程序和相应的文件,以确保NETWORK_SERVICE具有权限,并且我的服务正在该帐户下运行。所以这似乎不是权利问题。

有什么想法吗?

谢谢, 杰森

1 个答案:

答案 0 :(得分:1)

呼!只花了一两个星期!

自我注意:

自我,您必须确保从NETWORK_SERVICE帐户启动的任何第三方应用程序都不会尝试执行NETWORK_SERVICE帐户没有明确权限的操作。就像写入注册表一样,删除文件和其他任务。

尝试在管理员帐户下启动服务,并确保在调用在NETWORK_SERVICE以外的任何帐户下运行的WCF时在客户端中使用servicePrincipalName属性。在客户端的配置文件中有一个例子:

<endpoint address="net.tcp://myserver-2:8080/Service" binding="netTcpBinding"
bindingConfiguration="NetTcpBinding_IService1" contract="TCPService.IService1"
name="NetTcpBinding_IService1">
  <identity>
     <servicePrincipalName value="MyServiceReferenceName(InSolutionExplorer)\myserver-2"/>
     <dns value="myserver-2.mydomain.local" />
  </identity>
</endpoint>

希望这可以帮助其他人!