我有以下代码用于通过命令行以编程方式运行可执行文件:
var process = new Process();
var startInfo = new ProcessStartInfo();
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.WorkingDirectory = ConfigurationManager.BitCometDirectory;
startInfo.FileName = "cmd.exe";
var command = String.Format("/c bitcomet {0} -s --tray", path);
startInfo.Arguments = command;
process.StartInfo = startInfo;
var status = process.Start();
当我通过控制台应用程序测试此代码时,它运行良好。
然而,目标是将此代码集成到Windows服务中。当我这样做并将VS调试器附加到正在运行的服务时,该服务执行时没有问题/错误。 BitComet.exe以及BitCometService.exe(不确定是什么)也出现在任务管理器中。该命令是打开一个torrent文件,不幸的是,由于下载永远不会开始,因此没有发生。 FWIW,status
为true
。
当我最初设置Windows服务时,我必须创建一个安装程序,然后将帐户(运行服务的帐户类型)设置为LocalService
,这样我就不必验证安装时的服务。我还在帐户设置为User
的情况下对其进行了测试,结果相同。
有任何想法如何解决问题?
提前致谢。
更新#1:
我在代码中添加process.StandardOutput.ReadToEnd();
来记录错误,但总是返回一个空字符串。但是,当我检查应用程序日志时,我看到以下错误:
Faulting application name: UPNP.exe, version: 1.0.8.11, time stamp: 0x4a9638a4
Faulting module name: UPNP.exe, version: 1.0.8.11, time stamp: 0x4a9638a4
Exception code: 0xc0000005
Fault offset: 0x00013cbf
Faulting process id: 0xe088
Faulting application start time: 0x01d0a1ecc058cc01
Faulting application path: C:\Program Files\BitComet\tools\UPNP.exe
Faulting module path: C:\Program Files\BitComet\tools\UPNP.exe
Report Id: fe9f1270-0ddf-11e5-b482-10604b472e44
我不确定UPNP.exe
是什么,但它似乎被BitComet.exe
调用,这是我的代码所调用的。有关如何解决此问题的任何想法?我目前将服务设置为以我的用户身份登录(而不是本地系统或本地服务)。
更新#2
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
- <System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2015-06-08T14:13:24.000000000Z" />
<EventRecordID>136152</EventRecordID>
<Channel>Application</Channel>
<Computer><<computer info>></Computer>
<Security />
</System>
- <EventData>
<Data>UPNP.exe</Data>
<Data>1.0.8.11</Data>
<Data>4a9638a4</Data>
<Data>UPNP.exe</Data>
<Data>1.0.8.11</Data>
<Data>4a9638a4</Data>
<Data>c0000005</Data>
<Data>00013cbf</Data>
<Data>1c5c</Data>
<Data>01d0a1f5482780b3</Data>
<Data>C:\Program Files\BitComet\tools\UPNP.exe</Data>
<Data>C:\Program Files\BitComet\tools\UPNP.exe</Data>
<Data>85d9245f-0de8-11e5-bb36-10604b472e44</Data>
</EventData>
</Event>
答案 0 :(得分:0)
在黑暗中拍摄,但也许这就是问题/修复:
var command = String.Format("/c {0}\\bitcomet -s --tray", path);
这里的想法是将路径值放入CMD触发的命令中。如果那不是“路径”的话。积分,这不会解决问题。
答案 1 :(得分:0)
尝试解决UPNP.exe错误已变成黑洞。理想情况下,我会在同一个应用程序中拥有所有种子(手动和自动启动),作为替代方案,我想我会尝试连接不同的torrent工具。我发现aria2是一个命令行torrent客户端。几分钟后,我就可以通过该服务下载一个torrent。
我不确定BitComet及其UPNP.exe文件的问题是什么,或者如何解决它,但这是我将要采用的替代方案。