Principales respuestas
No reconoce ruta en archivo ejecutable

Pregunta
-
Hola a todos:
Tengo el código siguiente que en el ordenador de producción va perfecto, cambia el nombre del ejecutable que figura en la carpeta del disco C y todo bien.
Ahora, cuando llevo la aplicación (actualización) a otro ordenador, me indica el error de: "No se encuentra el directorio C:\Financial Systems. Acceso denegado a la ruta de ACCESO 'c:\Financial Systems'. Acepte para continuar.
Bien, la ruta existe calcada a lo que indica el error, pero por alguna razón (Es un Win10), no la reconoce y no se si es por cuestión de permisos o si no, no entiendo por qué falla.
Código:
Private Shared Sub CambiarNombreEjecutableVersionAntigua() Try '//Comprobamos si existe el directorio: Financial Systems y le cambiamos el nombre por Financial System, sin la s final. Dim ruta As String Dim Disco As String Disco = (My.Computer.FileSystem.CurrentDirectory).Substring(0, 3) '//Unidad de instalación de Financial System ruta = Disco & "Financial Systems" '//Ruta del directorio de instalación If Directory.Exists(ruta) Then My.Computer.FileSystem.RenameDirectory(ruta, "Financial System") Else Return End If Catch ex As Exception MessageBox.Show("No se encuentra el directorio C:\Financial Systems" & vbCrLf & ex.Message & vbCrLf & "Acepte para continuar.", "FINANCIAL SYSTEM", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
EL tema es que quiero sustituir una "s" que está mal puesta desde el inicio pero al ser actualizaciones distribuidas lo tengo que hacer por código. El usuario carga la aplicación y en el submain ya le digo que compruebe el nombre del programa y le quiete la "s" si procede.
Bueno, un saludo a todos.
Gemma
Respuestas
-
"gemma_campillo" escribió:
> Tengo el código siguiente que en el ordenador de producción va perfecto,
> cambia el nombre del ejecutable que figura en la carpeta del disco C y
> todo bien.
>
> My.Computer.FileSystem.RenameDirectory(ruta, "Financial System")¿Me estás diciendo que con el método RenameDirectory (en español, RenombrarDirectorio), estás "cambiando el nombre del ejecutable que figura en la carpeta del disco C"? ¿Y lo cambia perfectamente? Me parece a mí que te has equivoca de método, porque el método RenameDirectory se utiliza para cambiar el nombre de una carpeta o directorio, pero NO el nombre de un archivo, sea éste un archivo ejecutable o no.
> Ahora, cuando llevo la aplicación (actualización) a otro ordenador, me
> indica el error de: "No se encuentra el directorio C:\Financial Systems.
> Acceso denegado a la ruta de ACCESO 'c:\Financial Systems'. Acepte para
> continuar.¿Que no se encuentra el directorio o que te ha denegado el acceso porque existe un proceso ejecutándose dentro de la carpeta que deseas renombrar?
¡Vamos a ver! En principio, el código del procedimiento CambiarNombreEjecutableVersionAntigua es correcto, aunque mejorable. Pero, desde luego, no esperes renombrar la carpeta desde la propia aplicación que actualmente se está ejecutando y que reside en la carpeta devuelta por el valor de la expresión Disco & "Financial Systems".
> ' Unidad de instalación de Financial System
> Disco = (My.Computer.FileSystem.CurrentDirectory).Substring(0, 3)El método CurrentDirectory, obtiene o establece el directorio actual, que por defecto será aquel donde reside el ejecutable que ha invocado a dicho método, por tanto, si el archivo ejecutable (tu aplicación o el ejecutable de actualización) que actualmente se está ejecutando reside en C:\Finalcial Systems, vete buscando otra manera de cambiar el nombre de esa carpeta porque mientras que dicho ejecutable se encuentre en ejecución, me parece a mí que va a ser que no, por cuestiones que creo se consideran obvias. ;-)
Enrique Martínez Montejo
[MS MVP - Visual Studio y Tecnologías de Desarrollo]
Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.
Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción Option Strict.- Editado Enrique M. MontejoModerator martes, 10 de enero de 2017 18:11
- Marcado como respuesta gemma_campillo martes, 10 de enero de 2017 18:12
Todas las respuestas
-
"gemma_campillo" escribió:
> Tengo el código siguiente que en el ordenador de producción va perfecto,
> cambia el nombre del ejecutable que figura en la carpeta del disco C y
> todo bien.
>
> My.Computer.FileSystem.RenameDirectory(ruta, "Financial System")¿Me estás diciendo que con el método RenameDirectory (en español, RenombrarDirectorio), estás "cambiando el nombre del ejecutable que figura en la carpeta del disco C"? ¿Y lo cambia perfectamente? Me parece a mí que te has equivoca de método, porque el método RenameDirectory se utiliza para cambiar el nombre de una carpeta o directorio, pero NO el nombre de un archivo, sea éste un archivo ejecutable o no.
> Ahora, cuando llevo la aplicación (actualización) a otro ordenador, me
> indica el error de: "No se encuentra el directorio C:\Financial Systems.
> Acceso denegado a la ruta de ACCESO 'c:\Financial Systems'. Acepte para
> continuar.¿Que no se encuentra el directorio o que te ha denegado el acceso porque existe un proceso ejecutándose dentro de la carpeta que deseas renombrar?
¡Vamos a ver! En principio, el código del procedimiento CambiarNombreEjecutableVersionAntigua es correcto, aunque mejorable. Pero, desde luego, no esperes renombrar la carpeta desde la propia aplicación que actualmente se está ejecutando y que reside en la carpeta devuelta por el valor de la expresión Disco & "Financial Systems".
> ' Unidad de instalación de Financial System
> Disco = (My.Computer.FileSystem.CurrentDirectory).Substring(0, 3)El método CurrentDirectory, obtiene o establece el directorio actual, que por defecto será aquel donde reside el ejecutable que ha invocado a dicho método, por tanto, si el archivo ejecutable (tu aplicación o el ejecutable de actualización) que actualmente se está ejecutando reside en C:\Finalcial Systems, vete buscando otra manera de cambiar el nombre de esa carpeta porque mientras que dicho ejecutable se encuentre en ejecución, me parece a mí que va a ser que no, por cuestiones que creo se consideran obvias. ;-)
Enrique Martínez Montejo
[MS MVP - Visual Studio y Tecnologías de Desarrollo]
Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.
Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción Option Strict.- Editado Enrique M. MontejoModerator martes, 10 de enero de 2017 18:11
- Marcado como respuesta gemma_campillo martes, 10 de enero de 2017 18:12
-
Hola Enrique:
El problema está en que yo lo quiero cambiar mientras está ejecutándose la aplicación, directamente desde el Submain nada más arranca la aplicación y por lo que entiendo si está ejecutándose la misma no se podrá cambiar el nombre del directorio donde reside el ejecutable de la aplicación.
También lo estoy probando con este código y va perfecto desde el ordenador de producción, ya que hay una instalación hecho del programa ejecutable y claro, al estar cerrado el ejecutable, lo cambia sin problemas, ahora veré que cuando lo esté ejecutando a ver si lo cambia o me da error.
Este el código mas simple, pero que funciona perfectamente:
Private Shared Sub CambiarNombreEjecutableVersionAntigua() Try Dim Disco As String = (My.Computer.FileSystem.CurrentDirectory).Substring(0, 3) 'Unidad de instalación de Financial System Dim OldName, NewName As String OldName = Disco & "Financial Systems" ' Definimos el nuevo directorio NewName = Disco & "Financial System" If Directory.Exists(OldName) = True Then ' Renombramos el directorio Rename(OldName, NewName) Else Return End If Catch ex As Exception MessageBox.Show("No se encuentra el directorio C:\Financial Systems" & vbCrLf & ex.Message & vbCrLf & "Acepte para continuar.", "FINANCIAL SYSTEM", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
Bueno, pues voy a pensar que es lo que puedo hacer si este tampoco funciona, ya que el problema radica en que lo tengo que cambiar desde la ejecución del programa.
Bueno maestro, por lo menos ya se porque me daba error-
Muchas gracias querido Enrique y voy a probar con este código a ver que pasa.
Un fuerte abrazo.
Gemma
- Marcado como respuesta gemma_campillo martes, 10 de enero de 2017 18:28
- Desmarcado como respuesta Enrique M. MontejoModerator miércoles, 11 de enero de 2017 19:35
-
"gemma_campillo" escribió:
> El problema está en que yo lo quiero cambiar mientras está ejecutándose
> la aplicación, directamente desde el Submain nada más arranca la aplicación
> y por lo que entiendo si está ejecutándose la misma no se podrá cambiar el
> nombre del directorio donde reside el ejecutable de la aplicación.Lo has entendido bien. ;-)
> También lo estoy probando con este código y va perfecto ...
El problema no es del código, más bien de si en esa carpeta cuyo nombre deseas modificar, existe actualmente un archivo en ejecución, sea el ejecutable de tu aplicación o cualquier otro archivo diferente.
Enrique Martínez Montejo
[MS MVP - Visual Studio y Tecnologías de Desarrollo]
Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.
Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.
Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción Option Strict. -
Hola Enrique:
Bueno, a partir de ahí, voy a ver que le puedo hacer. Ya que efectivamente, el ejecutable está dentro de ese directorio o sea que a través de el no se puede arreglar. Otro jaleo. Bueno, voy a seguir a ver que se me ocurre.
Maestro, gracias por las explicaciones y por tu preocupación.
Un fuerte abrazo.
Gemma