¿Cómo comprobar en qué configuración regional se ejecuta una aplicación .NET, sin tener acceso a su código fuente?

StackOverflow https://stackoverflow.com/questions/59013

Pregunta

Contexto:Estoy a cargo de ejecutar un servicio escrito en .NET.Aplicación propietaria.Utiliza una base de datos SQL Server.Se ejecutó como usuario miembro del grupo Administradores en la máquina local.Funcionó bien antes de agregar la máquina a un dominio.

Entonces, agregué la máquina a un dominio (Win 2003) y cambié el usuario a miembro del grupo Usuarios avanzados y ahora, el

Problema:Algunas de las oraciones SQL que intenta ejecutar están "mágicamente" en la localización en español (donde , separa números de coma flotante en lugar de .), lo que genera errores.

Hay menos columnas en la instrucción Insertar que los valores especificados en la cláusula de valores.El número de valores en la cláusula de valores debe coincidir con el número de columnas especificadas en la instrucción Insertar.en system.data.sqlclient.sqlconnection.onerror (excepción sqlexception, boolean breakconnection)

El sistema operativo y la configuración regional de la máquina están en inglés.Le pregunté al proveedor de la aplicación y me dijo:

Parece que tiene una combinación de código que se ejecuta en Spanish Locale y SQL Server en English Locale.Entonces el SQL espera '15 .28 'y no '15, 28'

Lo cual me parece incorrecto en varios niveles (¿cómo puede SQL Server distinguir entre comas para separar argumentos y comas que pertenecen a un número de punto flotante?).

Entonces, el código parece estar tomando la configuración regional en español de algún lugar, no sé si es el usuario con el que se ejecuta o algún otro lugar (¿política global, tal vez?).Pero la pregunta es

¿Cuáles son los lugares donde se define la localización por máquina/usuario/dominio?

No conozco todos los lugares donde debo buscar al culpable, ¡así que ayúdenme a encontrarlo!

¿Fue útil?

Solución

Hay dos tipos de localización en .NET, ambas configuraciones para las culturas se pueden encontrar en estas variables (inicie una aplicación de línea de comandos .NET en la máquina para ver lo que dice):

System.thread.CurrentThread.CurrentCulture & System.thread.CurrentThread.Currentuiculture

http://msdn.microsoft.com/en-us/library/system.threading.thread_members.aspx

Se relacionan con la configuración en el panel de control (en la parte de configuración regional).Cree una aplicación de línea de comandos .NET, luego simplemente llame a ToString() en las propiedades anteriores, eso debería indicarle qué propiedad mirar.

Editar:

Resulta que la configuración de las configuraciones regionales por usuario se mantiene aquí:

HKEY_CURRENT_USER\Control Panel\International

Podría valer la pena inspeccionar el registro del usuario con la configuración regional española y compararlo con uno configurado en EE. UU. o cualquier configuración regional que necesite.

Otros consejos

Puede configurarlo en el contexto del hilo en el que se ejecuta su código.

System.Threading.Thread.CurrentThread.CurrentCulture

Genial, creé la aplicación de consola y, de hecho, la aplicación no es una locura, CurrentCulture está en español, pero solo para ESE usuario en ESA máquina.Si ejecuto la aplicación de consola como otro usuario, devuelve inglés para todas las culturas.

¿Debo abrir una nueva pregunta preguntando dónde están las configuraciones regionales para el usuario?

Bueno, si es específico del usuario, consulte el Configuración regional y de idioma Panel de control.

<rant>Como nota al margen, expulse al desarrollador por no tener en cuenta la cultura al utilizar cadenas.</rant>

Descubrí por qué sucedió solo en esa máquina.Fue el único en el que realmente inicié sesión con ese usuario, luego el controlador de dominio configuró la configuración regional en español.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top