How do I create a link in Windows 7 home premium as a regular user?

285

Solution 1

As stated here,

Creation of symbolic links requires the SeCreateSymbolicLinkPrivilege (“Create symbolic links”), which is granted only to administrators by default (but you can change that using security policy).

To change the policies:

  1. Right click on StartRun and launch secpol.msc.

  2. Open Security Settings → Local Policies → User Rights Assignment and select Create symbolic links (that represents SeCreateSymbolicLinkPrivilege).

enter image description here

  1. Double-click on the item and add yourself (or the whole Users group) to the list.

The changes will apply when you log out and log in again.

Solution 2

I just discovered that I can create a 'Junction' even when I can't create a symlink:

mklink [/D] /J junctionname filename

where /J indicates 'create a junction', and the /D is, I believe, for if the named file is a directory. (my user is currently an administrator)

However, a junction to a 'bat' file doesn't seem to be executable, so this isn't actually any use.

Does anyone understand why this is, or how it can be fixed to provide an alternative approach to the OP's problem?

Solution 3

I found only a non administrator can do it. Add non administrator to create symbolic links and runas non administrator. You'll have to add a person of with non admin privileges. Then you give permission to the target for the non admin, so he can do the runas mklink.

Solution 4

The above solutions didn't work for me because not only could I not create a "guest" user on my machine, I can't possibly ask all the users of my tools to do so too on their machines. Nor is it reasonable to require they use Administrator consoles.

My solution is to use: elevate.cmd and elevate.vbs

  1. Download from: http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx
  2. Put those two files on your system path (or somewhere convenient on the network)
  3. elevate.cmd cmd /c "cd /d LINK_DIR && mklink /D LINK_NAME LINK_TARGET_PATH"

Cons: elevate.cmd returns immediately but answering the UAC dialog takes time. This forced me to add a "did you ok the UAC dialog yet?" question to my script. It is possible to skip "elevate.cmd" by checking the exit code for the following command: whoami /groups | find "S-1-16-12288" (exit code 0 means you have an Adminstrator console).

Solution 5

Came across this problem today as well. I had a NAnt build task trying to create symbolic links on a computer. Was getting rejected for lack of privileges. I found this post which helped solve my problem: http://josh.mainelan.net/tag/mklink/.

The relevant section:

  1. Bring up your run box, type “secpol.msc” and click OK.
  2. Navigate under the Security Settings \ Local Policies \ User Rights Assignment folder.
  3. Find “Create symbolic links” and add the Users group to it.

I think you need to restart your computer or something after doing this.

Share:
285

Related videos on Youtube

Protagonist
Author by

Protagonist

Updated on September 17, 2022

Comments

  • Protagonist
    Protagonist almost 2 years

    I'm working on a tool that parses python source code into a nice html file. Basically, it read a python file line by line, looks at the line to determine what's in it and then adds the right <span> tags with colors, line breaks and whatnot.

    I got the general structure of the program, now I'm making all the functions that actually read a string and return an HTML enriched string.

    I'm stuck on parsing strings that have quotes in them ie.:

    x = 'hello there'  
    if x == 'example "quotes" inside quotes' and y == 'another example':    
    

    My work so far has been enumerating a string to get the indices of single-quotes, return them as a list and then two while loops that put the right html tags in the right places. It seemed to work fine when there was a single quote in the string, but all hell broke loose when I introduced two quotes on a line, or quotes inside quotes or finally - a string made up of '\''.

    It seems this route is a dead end. I'm now thinking of turning to .split(), shlex, or re and breaking down the string into a list and trying to work with that.
    I would really appreciate tips, pointers, and any advice.

    Edit: Also, to make it clearer, I need to put HTML tags in the right places in a string. Working with string indices didn't give much results with more complex strings.

    • Admin
      Admin about 13 years
      Make sure c:\backup\data doesn't already exist when you are trying to create the link as administrator.
  • stephenmm
    stephenmm over 14 years
    Installed, opened explorer and right clicked on the folder to be linked and "took ownership" then opened command window from here. Ran the above mklink command and got the same error again.
  • outsideblasts
    outsideblasts over 14 years
    Aw well, worth a try. As a recent Windows -> Linux user, I can sympathize fully about things not working and not knowing why. Good luck.
  • teknikqa
    teknikqa about 14 years
    As others have mentioned, SeCreateSymbolicLinkPrivilege is what is required. However, even if you are the administrator in Windows 7, most programs are not run with administrative privileges. To get administrative privileges for a program, follow the steps I mentioned above.
  • surfasb
    surfasb almost 13 years
    Ironically enough, neither taking ownership nor Show Command prompt gives you admin privileges. Just like in Linux.
  • Jonathan Hartley
    Jonathan Hartley over 12 years
    Note that on Win7, the 'Users' group wasn't visible for me until, from the dialog "Select Users or Groups", I clicked the "Object Types" button and added 'groups'.
  • Jonathan Hartley
    Jonathan Hartley over 12 years
    This doesn't work for me, regardless of whether I add my user, "Users", or "Everyone". I logged out, and I rebooted, but in my home dir, the command "mklink /D docs Dropbox" still gives me "You do not have sufficient privilege to perform this operation." Same result if I try on files instead of directories.
  • Jonathan Hartley
    Jonathan Hartley over 12 years
    This totally solved my problem: My user is an adminstrator, but "mklink" would not work until I enabled the "guest" account, call "runas /user:guest cmd" and then run mklink from that new cmd session. It also required temporarily granting perms so that the guest account could cd into and modify my home directory, where I wanted the symlink, which causes a flurry of error dialogs, but they seemed harmles.
  • Jonathan Hartley
    Jonathan Hartley over 12 years
    My problem solved by Brandon Donnelson's answer: In addition to the above, the user running "mklink" cannot be an administrator.
  • Jonathan Hartley
    Jonathan Hartley over 12 years
    For the record, "mklink" doesn't work for my regular user which is an administrator, but does work either when launched from a cmd which has been "runas /user:guest cmd" (I couldn't figure out the quoting required to directly run the mklink command as user guest) or when I remove my own account from the 'administrators' group.
  • Ben
    Ben over 12 years
    @Jonathan. didn't work for me. And it seems silly, or maybe I'm misunderstanding. Windows 7 doesn't allow an administrator to create symbolic links, but only non-administrators after an administrator gives them privledges???
  • Ben
    Ben over 12 years
    @Johnathan, I think you're correct. I've made a little progress on this for my own need here: superuser.com/q/402390/123731 but I'm running into other problems now (if you care to take a look :) )
  • Protagonist
    Protagonist almost 12 years
    Thanks a lot! I feel so ignorant. I'm playing around with this in IDLE and this is the perfect solution.
  • Protagonist
    Protagonist almost 12 years
    I know this might be a stupid question, but why do you use .readline instead of readline() ? Doesn't that call a variable called readline from the BytesIO object, instead of the readline() function? I know it works, I just tested it out, but I'm curious why it works. Thanks again!
  • unutbu
    unutbu almost 12 years
    The generate_tokens doc says its argument should have a readline method. Typically this could be a file object, but since I'm using a string, I wrap it in a BytesIO since it too has a readline method. readline without parentheses refers to the method itself. Putting readline() there would call the method prematurely, return a string, and submit that as the argument to generate_tokens. That's just not what we want; we want the method itself.
  • Protagonist
    Protagonist almost 12 years
    Wow, thanks for the fast answer. I learned so much from this, I gotta wrap my head around it, it's fascinating. Thanks again!
  • Brilliand
    Brilliand over 11 years
    You can create a hardlink (mklink /H) without admin privileges, and that will be executable. Hardlinks are for files, junctions are for directories, symlinks are for both (and /D is used to indicate that a symlink is for a directory).
  • Brilliand
    Brilliand over 11 years
    Junctions and hardlinks are both useless for the example in the OP, though, because neither of them can point to a network drive (hardlinks are limited to same partition, junctions are limited to local drives); only a symlink or Windows shortcut can do that.
  • Vladimir Sizikov
    Vladimir Sizikov almost 11 years
    It also worth noting that it is possible to run mklink successfully with an account that has admin rights. But that requires UAC to be turned off.
  • vlad_tepesch
    vlad_tepesch about 9 years
    this works for creating junctions but if creating sym links i still get the error message about not having sufficient permissions
  • mjaggard
    mjaggard over 6 years
    Why is windows so hard to automate? Where's the command line way to give the permission?
  • barlop
    barlop over 6 years
    I think he knows about running as administrator that's why he is asking the question
  • barlop
    barlop over 6 years
    -1 Try trying it yourself before posting it then you'd see it doesn't work
  • T.Todua
    T.Todua over 5 years
    To enable GP_EDIT, see this: superuser.com/a/105381/249349