Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] как сделать относительную ссылку (*.lnk) (http://forum.oszone.net/showthread.php?t=124568)

pva 30-11-2008 14:03 968088

как сделать относительную ссылку (*.lnk)
 
Не знал, в какую тему отнести. Сюда показалось наиболее логичным. Вопрос такой: можно ли, а если можно то как создать в винде на диске относительную ссылку?
Например, стуктура файлов:
Код:

[+] SOME_ROOT
 |-[+] Рабочее место
 |  |-[+] Cисадмин
 |  |  |-- codecs.lnk  -> SOME_ROOT/Хранилище/codecs
 |  |  '-- nero.lnk    -> SOME_ROOT/Хранилище/nero
 |  '--[-] Бухгалтер
 |-[+] Video
 |  |-- powerdvd.lnk    -> SOME_ROOT/Хранилище/powerdvd
 |  '-- codecs.lnk      -> SOME_ROOT/Хранилище/codecs
 |-[+] Audio
 |  |-- powerdvd.lnk    -> SOME_ROOT/Хранилище/powerdvd
 |  '-- codecs.lnk      -> SOME_ROOT/Хранилище/codecs
 |-[+] CD/DVD
 |  |-- powerdvd.lnk    -> SOME_ROOT/Хранилище/powerdvd
 |  '-- nero.lnk        -> SOME_ROOT/Хранилище/nero
 |-[+] Хранилище
 |  |--[-] qip
 |  |--[-] nero
 |  |--[-] codecs
 |  |--[-] nero
 ...

Чтобы куда б не примонтировать (на какую-нить букву диска или папку), всегда бы при нажатии на ярлык правильно находился путь.
Задача возникла из следующих соображений: есть архив, лень использовать специальный софт, зато нравится ходить по папочкам. Когда программу можно отнести к разным группам - постоянно забываю, где искать. Потом ещё возникает вопрос, куда помещать универсальную программу, которую вроде и туда и сюда поместить хочется.

pva 30-11-2008 14:21 968103

Нашёл 2 решенния:
1. %windir%\system32\RunDll32.exe shell32.dll,ShellExec_RunDLL ..\photo
http://doitq.blogsome.com/2007/01/23/p118/

2. explorer ..\photo

Ещё хочу. Попроще и применительней к задаче

Admiral 30-11-2008 15:06 968144

А такой вариант?
Цитата:

Цитата Vadikan
На жестком диске - Чисто символически »

На счёт того будет ли работать после перемонтировки не уверен.

Поздравляю с 500м постом!

pva 30-11-2008 15:18 968153

как её сделать? хочу попробовать Windows XP sp2
а, сори, увидел утилиту junction. Щас попробуем

pva 30-11-2008 16:07 968192

Где скачать утилиту после пары тыков мышкой не нашёл. Зато нашёл в МСДН про жёсткие ссылки, сделал утилитку:
Код:

#include <windows.h>
#include <iostream>
using namespace std;


int main(int argc, char**argv)
{
    if (2 < argc)
    {
            typedef int __stdcall (*CreateHardLink_type)(char*, char*, SECURITY_ATTRIBUTES*);

            CreateHardLink_type CreateHardLink = reinterpret_cast<CreateHardLink_type>(
                            GetProcAddress(GetModuleHandle("kernel32.dll"), "CreateHardLinkA"));
       
                if (CreateHardLink)
                {
                        int result = CreateHardLink(argv[1], argv[2], 0);
                        if (!result) clog << "os error " << GetLastError() << "\n";
                return result;
                }
                else
                {
                        cout << "cannot find kernel32.dll::CreateHardLinkA function\n";
                        return 0;
                }     
    }

    cout << "hard_link.exe \"link_name\" \"file_path\"\n"
            "creates NTFS hard link to file using CreateHardLink function\n";
           
    return 0;
}

Работает зашибенно! По сетке тоже. Только ссылаться можно внутри одного тома

Admiral 30-11-2008 16:35 968203

pva, в записи блога Vadikan'а приведенна ссылка http://technet.microsoft.com/en-us/s.../bb896768.aspx, вот прямая http://download.sysinternals.com/Files/Junction.zip

pva 30-11-2008 20:10 968417

junction не работает с файлами :( а CreateHardLink не захотела с папками

Delirium 01-12-2008 02:00 968648

Цитата:

Цитата pva
junction не работает с файлами а CreateHardLink не захотела с папками »

А ты проверяй перед созданием, если файл, то используй CreateHardLink и наоборот :)

Admiral 01-12-2008 03:52 968668

pva, вероятно Руссинович использовал не документированные функции.
Обзор исходника одноимённой проги Windows 2000 Junction Points там как раз говорится про недокументированный подход.


Время: 23:56.

Время: 23:56.
© OSzone.net 2001-