Pregunta

necesito para almacenar archivos en el escritorio común en Windows. La aplicación es una aplicación muy especial para exactamente un PC especial (preparación del dispositivo), por lo que tuvo que ser fácil para los usuarios que no son aficionados a la tecnología para encontrar y modificar el archivo de configuración. Ahora hemos cambiado a un dominio, y debido a diferentes personas (con diferentes cuentas) deben utilizar el software, tiene que estar en un lugar común, visto por todos los usuarios. Así que por favor no pregunte por qué es en el escritorio;)

Environment.GetFolderPath(Environment.SpecialFolder.Desktop) Anteriormente, acabo de utilizar. Hay varias de las carpetas comunes en la enumeración SpecialFolder, pero el escritorio común parece no estar allí. Me estoy perdiendo algo, o qué tengo que p / invocar SHGetSpecialFolderPath con CSIDL_COMMON_DESKTOPDIRECTORY?

¿Fue útil?

Solución

Yo creo que hay que utilizar la API SHGetSpecialFolderPath, ya que no hay valor de enumeración para "CommonDesktopDirectory". No se puede utilizar de forma explícita el valor de CSIDL_COMMON_DESKTOPDIRECTORY y echarlo a Environment.SpecialFolder, ya que el método GetFolderPath comprueba que el valor se define en la enumeración. Aquí está el código del método GetFolderPath (de reflector):

public static string GetFolderPath(SpecialFolder folder)
{
    if (!Enum.IsDefined(typeof(SpecialFolder), folder))
    {
        throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, GetResourceString("Arg_EnumIllegalVal"), new object[] { (int) folder }));
    }
    StringBuilder lpszPath = new StringBuilder(260);
    Win32Native.SHGetFolderPath(IntPtr.Zero, (int) folder, IntPtr.Zero, 0, lpszPath);
    string path = lpszPath.ToString();
    new FileIOPermission(FileIOPermissionAccess.PathDiscovery, path).Demand();
    return path;
}

Así que usted puede copiar y adaptar la parte que necesita fácilmente ...

Otros consejos

Para la clarificación - Por escritorio común qué se refiere? C: \ Documents and Settings \ All Users \ Escritorio

Si es así, este es un truco feo -

Dim c As String = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
Dim comDesktop As String = c.Substring(0, c.LastIndexOf("\")) + "\Desktop"

Puede utilizar Windows Script Host - WshShell.SpecialFolders

http://msdn.microsoft.com/ en-us / library / 0ea7b5xe (VS.85) .aspx

En primer lugar, añadir una referencia a "Windows Script Host Modelo de objetos". Usted encontrará esto en la ficha COM del cuadro de diálogo "Agregar referencia".

using IWshRuntimeLibrary;

object commonUserDesktop = "AllUsersDesktop";
WshShell shell = new WshShellClass();
string commonPath = shell.SpecialFolders.Item(ref commonUserDesktop).ToString();

Otra forma (sí, también es feo y trabajará probablemente sólo en Windows XP, no en Vista) es leer un valor de Registro

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folders, Común de escritorio

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