Esto es lo que me encontré con que trabajaban para ser capaz de obtener la ubicación de la carpeta desplegada de mi aplicación ClickOnce y que no se ha mencionado en cualquier lugar que he visto en mis búsquedas, por mis semejantes, escenario específico:
- La aplicación clickonce se implementa en la carpeta de red LAN de una empresa.
- La aplicación clickonce está configurada para estar disponible en línea o sin conexión.
- Mi URL de instalación de clickonce y las URL de actualización en las propiedades de mi proyecto no tienen nada especificado. Es decir, no hay una ubicación separada para la instalación o las actualizaciones.
- En mis opciones de publicación, tengo un acceso directo de escritorio creado para la aplicación clickonce.
- La carpeta a la que quiero acceder durante el inicio es aquella a la que quiero acceder mediante las versiones DEV, INT y PROD de la aplicación, sin cifrar la ruta.
Aquí es una representación visual de mi caso de uso:

- Las carpetas en cajas azules son mis ubicaciones de directorio para la aplicación de cada del medio ambiente.
- La carpeta en recuadro rojo es el directorio donde quiero obtener la ruta (que requiere primero obtener la ubicación de la carpeta desplegada de la aplicación "MyClickOnceGreatApp_1_0_0_37" que es lo mismo que el OP).
no he encontrado ninguna de las sugerencias en esta cuestión o sus comentarios a trabajar en la devolución de la carpeta que la aplicación ClickOnce se desplegó a (que entonces le mueva en relación con esta carpeta para buscar la carpeta de interés) . Ninguna otra búsqueda en Internet o preguntas relacionadas con SO aparecieron una respuesta tampoco.
Todas las propiedades sugeridas estaban fallando debido a que el objeto (por ejemplo, ActivationUri) era nulo o apuntaban a la carpeta de la aplicación instalada en caché de la PC local. Sí, podría manejar con gracia objetos nulos con un cheque de IsNetworkDeployed, eso no es un problema, pero sorprendentemente IsNetworkDeployed devuelve falso aunque de hecho tengo una ubicación de carpeta desplegada en la red para la aplicación clickonce. Esto se debe a que la aplicación se ejecuta desde los bits locales en caché.
La solución es mirar:
AppDomain.CurrentDomain.BaseDirectory
cuando la aplicación se está ejecutando dentro de Visual Studio como desarrollar y
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
mientras se esté ejecutando con normalidad.
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation
devuelve correctamente el directorio de red en el que se implementa mi aplicación Clickonce, en todos los casos. Es decir, cuando se puso en marcha a través de:
- setup.exe
- MyClickOnceGreatApp.application
- El acceso directo del escritorio crea tras la primera instalación y puesta en marcha de la aplicación.
Aquí está el código que uso al inicio de la aplicación para obtener la ruta de la carpeta WorkAccounts. Conseguir la carpeta de la aplicación desplegada es simple por no marchar hasta directorios padre:
string directoryOfInterest = "";
if (System.Diagnostics.Debugger.IsAttached)
{
directoryOfInterest = Directory.GetParent(Directory.GetParent(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).FullName).FullName).FullName;
}
else
{
try
{
string path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
path = path.Replace("file:", "");
path = path.Replace("/", "\\");
directoryOfInterest = Directory.GetParent(Directory.GetParent(path).FullName).FullName;
}
catch (Exception ex)
{
directoryOfInterest = "Error getting update directory needed for relative base for finding WorkAccounts directory.\n" + ex.Message + "\n\nUpdate location directory is: " + System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.ToString();
}
}
no tengo acceso a la carpeta C: \ Documents y carpeta Configuración del servidor que significa que no tengo acceso al archivo crea la aplicación. Ejecuto la aplicación desde cierta carpeta. Es la carpeta donde se publica la aplicación. ¿Cómo obtengo la ruta de esa carpeta? –
Oh, quieres la URL de implementación. Lo siento, no lo entendí en absoluto. ¿Estás tratando de obtenerlo desde la aplicación ClickOnce o desde una aplicación externa? – RobinDotNet