2009-09-18 18 views
5

Tenemos un servicio WCF que recientemente cambiamos de autohospedaje a alojado en IIS. Necesita lanzar un ejecutable usando Process.Start(). Esto funciona bien cuando está alojado en sí mismo, pero cuando alojada en IIS, obtenemos el error:¿Cómo puedo iniciar un archivo ejecutable desde un servicio WCF alojado en IIS?

System.ComponentModel.Win32Exception: El sistema no puede encontrar el archivo especificado

Tenemos el exe tanto en el directorio bin y en la raíz de la aplicación (al lado del archivo .svc). Pero parece que no puede encontrar el exe.

Cualquier ayuda sería apreciada. ¡Gracias!

EDITAR: Olvidé mencionar que estamos iniciando con el siguiente código: Process.Start ("LeakingWrapper.exe");

INFORMACIÓN ADICIONAL: Desafortunadamente, no tenemos la opción de cambiar el exe a un dll, porque está envolviendo una biblioteca de terceros que pierde memoria. Por lo tanto, tenemos que ponerlo en su propio proceso para garantizar que nuestro servicio WCF de larga duración no tenga fugas.

Respuesta

3

¿Tiene la configuración aspNetCompatibilityEnabled establecida en true? En ese caso, tendría un HttpContext, lo que podría tratar de usar para llamar algo así como:

string exeFileName = HttpContext.Current.Server.MapPath("~/LeakingWrapper.exe") 

O: ¿y si se especifica toda la ruta de acceso al archivo EXE, por ejemplo,

Process.Start("C:\yourServiceDir\bin\LeakingWrapper.exe") 

¿Eso ayuda en lo absoluto?

Marc

+0

Terminamos con su segunda sugerencia y se almacena la ruta completa en el web.config, a continuación, pasó en Process.Start(). ¡Gracias por la ayuda! – GuyBehindtheGuy

0

marc_s La respuesta es probablemente la correcta.

Sin embargo, también podría ser que el proceso no pueda encontrar el archivo porque no tiene los derechos para leer el archivo exe.

+0

Usé Process Monitor para asegurarme de que no era un problema de permisos. w3wp.exe simplemente no pudo encontrar el ejecutable! – GuyBehindtheGuy

0

Para utilizar la ruta del servicio web utilizando HttpContext debe incluir la siguiente línea en web.config de su servicio web

<configuration> 
<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 
</configuration>` 
Cuestiones relacionadas