Necesito para obtener la ruta de acceso a los nativos (en lugar de el WOW) directorio archivos de programa de una de 32 bits WOW proceso.

Cuando me pase CSIDL_PROGRAM_FILES (o CSIDL_PROGRAM_FILESX86) en SHGetSpecialFolderPath devuelve el WOW (Archivos de Programa (x86)) ruta de la carpeta.

Prefiero evitar el uso de una variable de entorno, si es posible.

Quiero comparar algunos de los valores que he leído de el registro, si los valores de punto a la ruta de el WOW o nativo versión de mi aplicación, a continuación, mi código hace algo, si no algo más.
Para averiguar dónde está el nativo y WOW versiones de mi aplicación se espera que necesito para obtener las rutas de acceso a “Archivos de Programa (x86)” y “Archivos de Programa”.

Usted NO debe confiar en el lugar donde su programa “se espera”. Las aplicaciones donde el usuario quiera. Pequeño Ssd se están convirtiendo en popular, y que voy a añadir ubicaciones de instalación para muchos equipos.
Totalmente, pero en este caso lo que realmente será en la carpeta archivos de programa.
Para mí, el por qué es la actualización de una lista de extensiones para Chrome, que podría ser en AppData, Archivos de Programa (x86) o de Archivos de Programa. (Por supuesto, el nombre de los Archivos de Programa podría ser otra cosa.)

OriginalEl autor s d | 2009-01-14

6 Comentarios

  1. 21

    Agradezco toda la ayuda y, especialmente, las advertencias en este hilo. Sin embargo, yo realmente no necesita esta ruta y esta es la forma en que se le metió en la final:

    (comprobación de errores eliminados para mayor claridad, utilice a su propio riesgo, etc)

    WCHAR szNativeProgramFilesFolder[MAX_PATH];
    ExpandEnvironmentStrings(L"%ProgramW6432%", 
                           szNativeProgramFilesFolder, 
                           ARRAYSIZE(szNativeProgramFilesFolder);
    Gracias! En virtud de una circunstancia especial, yo necesito esto exactamente.
    Este no me funciona cuando se ejecuta como un servicio

    OriginalEl autor s d

  2. 12

    Permítanme citar Raymond Chen‘s excelente blogpost sobre el tema:

    En Windows de 64 bits, 32 bits se ejecutan los programas
    en una capa de emulación. Esta emulación
    capa simula la arquitectura x86,
    la virtualización de la CPU, el sistema de archivos,
    el registro, el medio ambiente
    las variables, el sistema de información
    funciones, todas esas cosas. Si una de 32 bits
    el programa trata de buscar en el sistema,
    va a ver un sistema de 32 bits. Para
    ejemplo, si el programa llama a la
    GetSystemInfo función para ver lo que
    procesador está ejecutando, será dicho
    que se ejecuta en una versión de 32 bits
    procesador, con una dirección de 32 bits
    el espacio, en un mundo con una de 32 bits cielo
    y de 32 bits de aves en los 32 bits de los árboles.

    Y que es el punto de la emulación:
    Para mantener el programa de 32 bits feliz por
    la simulación de 32 bits de ejecución
    medio ambiente.

    La pregunta es “¿Cuál es la manera de
    encontrar el 64 Archivos de Programa
    directorio de una aplicación de 32 bits?”

    La respuesta es “es mejor trabajar
    con el sistema de contra ella.
    ” Si
    usted es un programa de 32 bits, entonces estás
    va a ser la lucha contra la
    emulador cada vez que se intenta interactuar
    con el mundo exterior. En su lugar, sólo
    vuelva a compilar el instalador de 64 bits
    programa. Tiene el instalador de 32 bits
    detectar que se está ejecutando en un sistema de 64 bits
    sistema y ejecute el instalador de 64 bits
    en su lugar. El instalador de 64 bits no
    ejecutar en la emulación de 32 bits de la capa, por lo que
    cuando intenta copiar un archivo o actualizar
    una clave del registro, se verá el real
    Archivo de 64 bits del sistema y el real de 64 bits
    registro.

    Si usted todavía desea hacer esto, recomiendo la lectura de los comentarios en esta publicación de blog, ya que contienen algunos buenos consejos.

    Uno es totalmente legítima caso de uso para obtener la 64b ProgFiles de un programa 32b es cuando se está tratando de copia de seguridad de su equipo, pero quiere ignorar Archivos de Programa. Por supuesto, usted quiere ignorar la 64b carpeta de Archivos de Programa.

    OriginalEl autor Tamas Czinege

  3. 3

    Que estamos en el camino correcto Uso de la KNOWNFOLDERID de FOLDERID_ProgramFilesX64

    La SHGetKnownFolderPath función puede ser utilizada para recuperar la ruta de acceso completa de una determinada KnownFolder.

    No es que sólo disponibles en la Vista o posterior? ¿Qué sucede cuando codde llamadas esta en pre-Vista Windows?
    Me acaba de golpear a ese problema, necesito que funcione en XP y Server 2003 x64.
    SHGetKnownFolderPath con FOLDERID_ProgramFilesX64 no funciona en versiones de 32 bits de Windows. Es/fue documentado como de trabajo, pero, por desgracia, no realmente. Ver el Contenido de la Comunidad sección aquí: msdn.microsoft.com/en-us/library/bb762584%28VS.85%29.aspx
    Utilizar SHGetFolderPath en XP.

    OriginalEl autor Bevan

  4. 1

    Esto es casi sin duda una mala idea, de acuerdo a un reciente-ish post por el infame Raymond Chen. Ver aquí para más detalles. Línea de fondo, creo que se puede hacer, pero es un montón de trabajo duro y casi ciertamente una manera más fácil.

    Microsoft construyó el WOW capa de emulación para hacer su vida más fácil. No gaste todo su tiempo y esfuerzo por luchar contra ella :-).

    Tal vez si usted nos dijo por qué necesita la no-WOW directorio de Archivos de Programa, podríamos ayudar más.

    OriginalEl autor paxdiablo

  5. 1

    De lo necesario para obtener el 64 de la Carpeta de Programa de un Logonscript y usados:

    Dim oWshShell : Set oWshShell = CreateObject("WScript.Shell")
    Dim sProgramDirPath : sProgramDirPath = 
        oWshShell.ExpandEnvironmentStrings("%ProgramW6432%")
    
    WScript.Echo sProgramDirPath

    OriginalEl autor Peter

  6. -2

    La mejor y de manera universal para obtener la ruta de acceso a “Archivos de Programa”, es la consulta del registro:

    64-Bit con el Proceso de la consulta:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
    a conseguir “C:\Program los Archivos”
    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\ProgramFilesDir
    a conseguir “C:\Program Files (x86)”

    De 32 Bits Proceso (Wow64) puede consultar:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
    a conseguir “C:\Program Files (x86)”
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir con KEY_WOW64_64KEY opción!
    a conseguir “C:\Program los Archivos”

    Pseudo-código:

    OpenKey(hKey, HKEY_LOCAL_MACHINE, L"SOFTWARE\Microsoft\Windows\CurrentVersion", KEY_READ | KEY_WOW64_64KEY);
    QueryStringValue(hKey, L"ProgramFilesDir", sValue);
    Usted debe utilizar las funciones de la API para obtener la ubicación: SHGetFolderPath o ExpandEnvironmentStrings.
    ¿Qué pasa si las claves de registro de cambio en Windows 9?

    OriginalEl autor Stanislav Povolotsky

Dejar respuesta

Please enter your comment!
Please enter your name here