Pregunta

Estoy intentando leer el blanco de todos los accesos directos del escritorio en una aplicación C # 4. Los accesos directos en el escritorio de Windows pueden proceder de más de una ubicación, dependiendo de si se crea el acceso directo para todos los usuarios o sólo el usuario actual. En este caso específico Estoy intentando leer un acceso directo desde el escritorio pública, por ejemplo, desde C:. \ Users \ Public \ Desktop \ shortcut.lnk

El código es así (camino es una cadena contaning la ruta al archivo LNK):

var shell = new Shell32.ShellClass();
var folder = shell.NameSpace(Path.GetDirectoryName(path));
var folderItem = folder.ParseName(Path.GetFileName(path));
if (folderItem != null)
{
    var link = (Shell32.ShellLinkObject)folderItem.GetLink;

La última línea lanza una System.UnauthorizedAccessException, lo que indica que no se permite leer el contenido del archivo de acceso directo. He tratado de archivos de acceso directo en el escritorio privada del usuario (C: \ Users \ nombre de usuario \ Desktop). Y que funciona bien

Por lo tanto, mis preguntas son:

(1) ¿Por qué mi solicitud no se les permite / lectura / el acceso directo desde el código, cuando puedo leer con claridad el contenido como un usuario?

(2) hay una manera de evitar esto? Tal vez el uso de un archivo de manifiesto especial para la aplicación?

Y, por cierto, mi sistema operativo es Windows 7, 64 bits.

estar bien

-h -

¿Fue útil?

Solución

Sí, no se puede obtener acceso al archivo .lnk en esa carpeta por defecto. Va a crear un objeto COM que le permite modificar las propiedades .lnk. Y eso requiere una cuenta de administrador con el UAC desactivado.

Sí, se puede arreglar eso con un manifiesto .

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