如何在Windows Vista中创建符号链接?

 2023-01-20    274  

问题描述

我希望在Windows Vista/2008 Machine上从Java创建Symlinks(软链接).我对我需要召集JNI这样做的想法感到满意.我在实际的C代码方面得到帮助.创建链接的适当系统调用是什么?对有关该主题的一些良好文档的指示将不胜感激.

推荐答案

Windows中的符号链接是使用 createSymboliclink api function ,它的参数非常类似于 mklink命令行线实用程序.

如何在Windows Vista中创建符号链接?

假设您正确地引用了JNI和Win32 SDK标题,则您的代码可能很简单:

JNIEXPORT jboolean JNICALL Java_ClassName_MethodName
    (JNIEnv *env, jstring symLinkName, jstring targetName)
{
    const char *nativeSymLinkName = env->GetStringUTFChars(symLinkName, 0);
    const char *nativeTargetName = env->GetStringUTFChars(targetName, 0);

    jboolean success = (CreateSymbolicLink(nativeSymLinkName, nativeTargetName, 0) != 0);

    env->ReleaseStringUTFChars(symLinkName, nativeSymLinkName);
    env->ReleaseStringUTFChars(targetName, nativeTargetName);

    return success;
}

请注意,这只是我的头顶,而且我从来没有与JNI打交道,所以我可能忽略了做这项工作的一些优点…

其他推荐答案

这已经在我的列表中尝试,从我的笔记中:

API:

BOOLEAN WINAPI CreateSymbolicLink(
  __in  LPTSTR lpSymlinkFileName,
  __in  LPTSTR lpTargetFileName,
  __in  DWORD dwFlags
);

一些C#示例:

一个C ++示例,这是我正在阅读的另一篇文章中的CNP.我尚未对其进行测试,因此请谨慎使用.

typedef BOOL (WINAPI* CreateSymbolicLinkProc) (LPCSTR, LPCSTR, DWORD);

void main(int argc, char *argv[]) 
{
  HMODULE h;
  CreateSymbolicLinkProc CreateSymbolicLink_func;
  LPCSTR link = argv[1];
  LPCSTR target = argv[2];
  DWORD flags = 0;

  h = LoadLibrary("kernel32");
  CreateSymbolicLink_func =
    (CreateSymbolicLinkProc)GetProcAddress(h,
  if (CreateSymbolicLink_func == NULL) 
  {
     fprintf(stderr, "CreateSymbolicLinkA not available\n");
  } else 
  {
     if ((*CreateSymbolicLink_func)(link, target, flags) == 0) 
     {
        fprintf(stderr, "CreateSymbolicLink failed: %d\n",
        GetLastError());

  } else 
  {
     printf("Symbolic link created.");
  }
}

}

这样说,我不会使用此代码:-)我要么倾向于分叉mklink,要么从Jruby/jpython查看本机库(对不起,由于网络连接是淡淡的,我无法查找ATM).我似乎还记得Jruby写了一个将各种Posix API的库写入Java(认为像Ruby合规性所需的Chown一样,但不是跨平台).似乎对此非常满意的Jpython人正在使用该图书馆.如果此库不提供SYM链接支持,我会感到惊讶.

其他推荐答案

您不能只是呼叫命令行并使用 mklink ?

以上所述是小编给大家介绍的如何在Windows Vista中创建符号链接?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26129.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。