none
Quitar permisos de administrador

    Pregunta

  • Hola a todos:

    Precisaría por favor que me indicaráis como puedo quitar los permisos de administrador cada vez que se abre el ejecutable de la aplicación ya instalada. Es decir, que la pueda abrir cualquier usuario ya que la misma va con su contraseña, etc. y es engorroso que cada vez que se clica en el icono el usuario la tenga que abrir con permiso de administrador.

    He estado mirando en el foro pero por lo que veo es para suministrar permisos de administrador pero no al revés.

    Un saludo.

    Gemma

    martes, 8 de septiembre de 2015 8:19

Respuestas

  • "gemma_campillo" escribió:

    > He estado mirando en el foro pero por lo que veo es para suministrar
    > permisos de administrador pero no al revés.

    Pero es que es así. Se modifica el archivo de configuración para elevar los permisos que requiere la aplicación pero no para disminuirlos, ya que éste es su valor por defecto para que pueda ser ejecutado por cualquier cuenta de usuario normal y corriente.

    Revisa el archivo de configuración de tu aplicación (app.config) y verifica que el valor requestedExecutionLevel level sea igual asInvoker:

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="asInvoker" uiAccess="false" />
          </requestedPrivileges>
        </security>
    </trustInfo>
    

    Tanto si está establecido a asInvoker como si no existe información de seguridad, en principio la aplicación podrá ser ejecutada por cualquier usuario sin necesidad de que pertenezca al grupo Administradores.

    Lo único que se me pasa ahora por la cabeza es que tu aplicación ejecute otro programa, o tenga referenciada algún otro componente .NET o COM, que necesite la elevación de permisos para que se pueda ejecutar, pero si no es así, no encuentro yo motivo alguno para que una simple aplicación .NET necesite una elevación de permisos.


    Enrique Martínez Montejo
            [MS MVP - VB]

    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.

    • Marcado como respuesta gemma_campillo martes, 8 de septiembre de 2015 15:31
    martes, 8 de septiembre de 2015 14:51
    Moderador
  • "gemma_campillo" escribió:

    > Ahora si entro como "administrador" no pide nada y corre perfectamente.

    Pero es que eso NO DEBERÍA SER ASÍ.

    ¿Exactamente dónde se produce el error? ¿Quizás al ejecutar la siguiente consulta de actualización?

    > cmd.CommandText = "UPDATE PARAMETROS SET VERSION = 'KKK" : MetodosDatos.ExecuteAction(cmd)

    Si eso es así, no me queda más que pensar que el usuario que actualmente ha iniciado sesión en Windows (que se supone no pertenece al grupo Administradores), NO TIENE ACCESO a la carpeta que contiene la base de datos, o al archivo de Access propiamente dicho (gemmafin.accdb).

    ¿Esta es tu cadena de conexión?
      
    <add name="MiCadenaConexion" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source = |DataDirectory|\gemmafin.accdb" providerName="System.Data.OleDb"/>

    Pues abre el Explorador de archivos y te diriges a la carpeta que contenga el archivo de Access. Selecciona éste, y con el botón secundario del ratón, selecciona Propiedades y dirígete a la pestaña Seguridad. Mira a ver si tu cuenta de usuario tiene control total sobre el archivo. Igual tendrás que hacer con la Propiedades de la propia carpeta donde reside el archivo de Access.

    Prueba a cambiar el archivo ejecutable, base de datos y restantes archivos necesarios a otra carpeta donde sepas con seguridad que tienes control total sobre el archivo de Access.

    Es que ahora mismo no se me ocurre otra cosa para que una simple consulta de actualización tenga que ser ejecutada por una cuenta del grupo Administradores. ¿?


    Enrique Martínez Montejo
            [MS MVP - VB]

    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.

    • Marcado como respuesta gemma_campillo martes, 8 de septiembre de 2015 17:12
    martes, 8 de septiembre de 2015 16:29
    Moderador

Todas las respuestas

  • "gemma_campillo" escribió:

    > He estado mirando en el foro pero por lo que veo es para suministrar
    > permisos de administrador pero no al revés.

    Pero es que es así. Se modifica el archivo de configuración para elevar los permisos que requiere la aplicación pero no para disminuirlos, ya que éste es su valor por defecto para que pueda ser ejecutado por cualquier cuenta de usuario normal y corriente.

    Revisa el archivo de configuración de tu aplicación (app.config) y verifica que el valor requestedExecutionLevel level sea igual asInvoker:

    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <requestedExecutionLevel level="asInvoker" uiAccess="false" />
          </requestedPrivileges>
        </security>
    </trustInfo>
    

    Tanto si está establecido a asInvoker como si no existe información de seguridad, en principio la aplicación podrá ser ejecutada por cualquier usuario sin necesidad de que pertenezca al grupo Administradores.

    Lo único que se me pasa ahora por la cabeza es que tu aplicación ejecute otro programa, o tenga referenciada algún otro componente .NET o COM, que necesite la elevación de permisos para que se pueda ejecutar, pero si no es así, no encuentro yo motivo alguno para que una simple aplicación .NET necesite una elevación de permisos.


    Enrique Martínez Montejo
            [MS MVP - VB]

    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.

    • Marcado como respuesta gemma_campillo martes, 8 de septiembre de 2015 15:31
    martes, 8 de septiembre de 2015 14:51
    Moderador
  • Hola maestro:

    Ya lo he puesto en el archivo de configuración, ahora prepararé otro ejecutable y ya está.

    Es que es muy pesado eso de que cada vez te de un mensaje de error de "consulta no actualizable" nada mas que arranca el programa, entonces la abro como administrador y perfecto.

    Bueno, Enrique te estoy mareando ostensiblemente pero las alumnas a veces son pesadas, ya lo sabes.

    Anda querido amigo otra vez mil gracias y un fuerte abrazo. El día que cobres por las respuestas te haces millonario.

    Un abrazo.

    Gemma

    martes, 8 de septiembre de 2015 15:31
  • "gemma_campillo" escribió:

    > Es que es muy pesado eso de que cada vez te de un mensaje de error de
    > "consulta no actualizable" nada mas que arranca el programa, entonces
    > la abro como administrador y perfecto.

    Pero, ¿eso a qué se debe? ¿Es que al inicio de tu programa estás ejecutando algún tipo de consulta SQL? ¿Què tipo de consulta ejecutas para que ésta necesite privilegios de Administrador?


    Enrique Martínez Montejo
            [MS MVP - VB]

    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, 8 de septiembre de 2015 15:37
    Moderador
  • Hola maestro:

    Yo no tenía nada de requestedExecutionLevel level sea igual asInvoker en mi App.Config.

    He añadido lo que me has dicho y no me deja arrancar la aplicación.

    Adjunto tal como tengo el App.Config.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <section name="FinancialSystem.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
          <section name="FinancialSystem.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
        </sectionGroup>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
          <section name="FinancialSystem.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
          <section name="FinancialSystem.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
        </sectionGroup>
      </configSections>
    
    
      <connectionStrings>
       
        <add name="MiCadenaConexion" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source = |DataDirectory|\gemmafin.accdb" providerName="System.Data.OleDb"/>
      </connectionStrings>
     
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      </startup>
    
      
      <applicationSettings>
        <FinancialSystem.MySettings>
          <setting name="Cultura" serializeAs="String">
            <value/>
          </setting>
          <setting name="CONTRASEÑA" serializeAs="String">
            <value/>
          </setting>
          <setting name="ConversionAccess" serializeAs="String">
            <value/>
          </setting>
        </FinancialSystem.MySettings>
        <FinancialSystem.My.MySettings>
          <setting name="Cultura" serializeAs="String">
            <value/>
          </setting>
        </FinancialSystem.My.MySettings>
      </applicationSettings>
      <userSettings>
        <FinancialSystem.MySettings>
          <setting name="chkUsuario" serializeAs="String">
            <value/>
          </setting>
          <setting name="PassWordConexion" serializeAs="String">
            <value/>
          </setting>
        </FinancialSystem.MySettings>
        <FinancialSystem.My.MySettings>
          <setting name="chkUsuario" serializeAs="String">
            <value/>
          </setting>
        </FinancialSystem.My.MySettings>
      </userSettings>
    
    </configuration>

    El error que da es el siguiente:

    Error al intentar ejecutar el proyecto. No se puede iniciar el programa: C:\Users\Gemma\Documents\Visual Studio 2013\Projects\FinancialSystem\FinancialSystem\bin\Debug\FinancialSystem.exe

    Error de inicio de la aplicación porque la configuración de la misma no es correcta. Revise el archivo de manifiesto poara detectar posibles errores. Si vuelve a instalar la aplicación puede que se corrijan los problemas. Para obtener más detalles, consulte el registro de eventos de la aplicación.

    Antes de este error, me saltó que la sección <TrustInfo no la reconocía.

    Bueno, no se nada de esto.

    Un saludo maestro.

    Gemma


    martes, 8 de septiembre de 2015 15:52
  • "gemma_campillo" escribió:

    > Yo no tenía nada de requestedExecutionLevel level sea igual asInvoker en mi App.Config.
    >
    > He añadido lo que me has dicho y no me deja arrancar la aplicación.

    Pues si no tenías nada en el archivo de configuración, elimina todo lo que le has añadido.

    El tema es que si tu no tienes nada en el archivo de configuración para que la aplicación se ejecute con permisos de Administrador, ¿por que narices te aparece el mensaje de error de "consulta no actualizable" nada más arrancar el programa? ¿Qué es lo que estás haciendo para que esa consulta tenga que ejecutarse con permisos de Administrador?


    Enrique Martínez Montejo
            [MS MVP - VB]

    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, 8 de septiembre de 2015 16:00
    Moderador
  • Hola Enrique:

    Entra el programa por el SubMain y hace una consulta al tipo de versión "strVersion" tal como adjunto en el código.

    Public Class Submain
    
        <STAThread()> _
        Friend Shared Sub Main()
    
            Application.EnableVisualStyles()
            Application.SetCompatibleTextRenderingDefault(False)
    
            AddHandler Application.ThreadException, AddressOf Application_ThreadException
            'Added this
            AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionEventRaised
            'MsgBox("Cargando con éxito el main")
    
            'Mostramos el tipo de versión cargada por defecto.
            AccesoDatosConsultas.TIPO_VERSION()
            modIdiomas.CodigoPaises()
    
    
            Using frm As New frmPresentacion()
                frm.ShowDialog()
            End Using
    
    
            If VarGlobal.WControl = "0" Or VarGlobal.WControl = "2" Or VarGlobal.WControl = "6" Or VarGlobal.WControl = "8" Or VarGlobal.WControl = "9" Then
                Dim frm As New frmDemo
                'AccesoLogica.MostrarDatosInstalaciónDemo()
                frm.ShowDialog()
                Application.Run()
            ElseIf VarGlobal.WControl = "K" Then
                Dim frmAct As New frmActivacion
                frmAct.ShowDialog()
                Exit Sub
            ElseIf VarGlobal.WControl = "X" Then
                Exit Sub
            End If
    
    
            If modSeguridad.ExisteArchivoLicencia Then
                If modSeguridad.LicenciaCorrecta Then
                    ' MsgBox("Licencia correcta.")
                Else
                    NumeroMaquina() 'MsgBox("Licencia incorrecta.")
                    Exit Sub
                End If
            Else
                NumeroMaquina() 'MsgBox("Licencia incorrecta.")
            End If
    
            Using lgn As New frmLogin()
                lgn.ShowDialog()
            End Using
    
            If LoginService.ContrasenaCorrecta = False Then
                Exit Sub
            Else
                Dim emp As New frmEmpresas
                emp.Show()
                Application.Run()
            End If
    
        End Sub

    Consulta para la strVersion, con ello sabemos que versión carga el programa.

     Public Shared Sub TIPO_VERSION()
            Dim a As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly
            Dim rm As New Resources.ResourceManager(a.GetName.Name & ".Textos", a)
    
            Dim cmd As New OleDbCommand()
            'Grabamos el plan contable en la tabla 'Empresas'.
                Dim cadenaConexion As String = Configuracion.CadenaConexion
                Using Cnn As New OleDbConnection(cadenaconexion)
                    Cnn.Open()
    
                    If VarGlobal.WControl = "K" Then
                        'Cuando se entrega para "Demo" frmDemo
                        cmd.CommandText = "UPDATE PARAMETROS SET VERSION = 'KKK" : MetodosDatos.ExecuteAction(cmd)
                    End If
    
                    '/////////////////////////////////////////////////////////////////////////
                    'If WControl = "1" Then
                    '    'Cuando se entrega para cambiar de cualquier versión a Master
                    '    cmd.CommandText = "UPDATE PARAMETROS SET VERSION = 'XYZ" : ExecuteAction(cmd)
                    'End If
                    '/////////////////////////////////////////////////////////////////////////
                    'End Using
    
    
                    'Obtenemos el valor de la varibale "VarGlobal.strVersion"
                    'Using Cnn As New OleDbConnection(strConexion)
                    '    Cnn.Open()
                    Dim query As String = "SELECT VERSION, CONTROL FROM PARAMETROS"
    
                    Using CmdVersion As New OleDbCommand(query, Cnn)
    
                        Dim reader As OleDbDataReader = CmdVersion.ExecuteReader()
    
                        If reader.Read() Then
                            VarGlobal.strVersion = CStr(reader("VERSION"))
                            VarGlobal.WControl = CStr(reader("CONTROL"))
                        End If
                    End Using
                End Using
    
        End Sub

    Ahora si entro como "administrador" no pide nada y corre perfectamente.

    Un saludo.

    Gemma

    martes, 8 de septiembre de 2015 16:12
  • "gemma_campillo" escribió:

    > Ahora si entro como "administrador" no pide nada y corre perfectamente.

    Pero es que eso NO DEBERÍA SER ASÍ.

    ¿Exactamente dónde se produce el error? ¿Quizás al ejecutar la siguiente consulta de actualización?

    > cmd.CommandText = "UPDATE PARAMETROS SET VERSION = 'KKK" : MetodosDatos.ExecuteAction(cmd)

    Si eso es así, no me queda más que pensar que el usuario que actualmente ha iniciado sesión en Windows (que se supone no pertenece al grupo Administradores), NO TIENE ACCESO a la carpeta que contiene la base de datos, o al archivo de Access propiamente dicho (gemmafin.accdb).

    ¿Esta es tu cadena de conexión?
      
    <add name="MiCadenaConexion" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source = |DataDirectory|\gemmafin.accdb" providerName="System.Data.OleDb"/>

    Pues abre el Explorador de archivos y te diriges a la carpeta que contenga el archivo de Access. Selecciona éste, y con el botón secundario del ratón, selecciona Propiedades y dirígete a la pestaña Seguridad. Mira a ver si tu cuenta de usuario tiene control total sobre el archivo. Igual tendrás que hacer con la Propiedades de la propia carpeta donde reside el archivo de Access.

    Prueba a cambiar el archivo ejecutable, base de datos y restantes archivos necesarios a otra carpeta donde sepas con seguridad que tienes control total sobre el archivo de Access.

    Es que ahora mismo no se me ocurre otra cosa para que una simple consulta de actualización tenga que ser ejecutada por una cuenta del grupo Administradores. ¿?


    Enrique Martínez Montejo
            [MS MVP - VB]

    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.

    • Marcado como respuesta gemma_campillo martes, 8 de septiembre de 2015 17:12
    martes, 8 de septiembre de 2015 16:29
    Moderador
  • Hola Enrique:

    Es un problema de permisos de la base de datos. Ahora lo he corregido y creo que solamente puede ser eso, si no, el programa no arrancaría perfectamente como administrador. Entiendo que por falta de permisos no deja realizar la primera consulta que hay al cargar el programa.

    Bueno, voy a crear otro ejecutable y probando al final saldrá correctamente.

    Gracias por todo querido Enrique.

    Un fuerte abrazo.

    Gemma

    martes, 8 de septiembre de 2015 17:12
  • "gemma_campillo" escribió:

    > Es un problema de permisos de la base de datos. Ahora lo he corregido y
    > creo que solamente puede ser eso, si no, el programa no arrancaría
    > perfectamente como administrador. Entiendo que por falta de permisos no
    > deja realizar la primera consulta que hay al cargar el programa.

    No entiendo. ¿Permisos a nivel del sistema operativo sobre el propio archivo de base de datos?

    > Bueno, voy a crear otro ejecutable y probando al final saldrá correctamente.

    Si se debe a problemas de permisos a nivel del sistema operativo, deja de crear ejecutables porque el problema lo vas a seguir teniendo siempre y cuando ejecutes la aplicación en tu PC, hasta que no subsanes dichos problemas de permisos.


    Enrique Martínez Montejo
            [MS MVP - VB]

    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, 8 de septiembre de 2015 17:24
    Moderador
  • Hola:

    Enrique el problema era de la base de datos, no del sistema operativo. Le faltaban permisos.

    Ya está corregido.

    Nunca había tocado la cuestión de permisos en la base de datos, por ello, no se porqué no los tenían todos.

    Bueno, creo que era eso.

    Ahora estoy montando ya un ejecutable final a ver si funciona todo.Gracias por todo querido maestro.

    Un abrazo.

    Gemma

    martes, 8 de septiembre de 2015 17:35