none
No reconoce ruta en archivo ejecutable RRS feed

  • 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

    martes, 10 de enero de 2017 12:14

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.


    martes, 10 de enero de 2017 17:58
    Moderador

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.


    martes, 10 de enero de 2017 17:58
    Moderador
  • 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

    martes, 10 de enero de 2017 18:12
  • "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.

    martes, 10 de enero de 2017 18:17
    Moderador
  • 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

    martes, 10 de enero de 2017 18:30