How do I create a link in Windows 7 home premium as a regular user?
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:
Right click on
Start
→Run
and launchsecpol.msc
.Open
Security Settings → Local Policies → User Rights Assignment
and selectCreate symbolic links
(that representsSeCreateSymbolicLinkPrivilege
).
- 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
- Download from: http://technet.microsoft.com/en-us/magazine/2008.06.elevation.aspx
- Put those two files on your system path (or somewhere convenient on the network)
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:
- Bring up your run box, type “secpol.msc” and click OK.
- Navigate under the Security Settings \ Local Policies \ User Rights Assignment folder.
- Find “Create symbolic links” and add the Users group to it.
I think you need to restart your computer or something after doing this.
Related videos on Youtube
![Protagonist](https://i.stack.imgur.com/N2sSS.jpg?s=256&g=1)
Protagonist
Updated on September 17, 2022Comments
-
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
, orre
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 about 13 yearsMake sure c:\backup\data doesn't already exist when you are trying to create the link as administrator.
-
-
stephenmm over 14 yearsInstalled, 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 over 14 yearsAw 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 about 14 yearsAs 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 almost 13 yearsIronically enough, neither taking ownership nor Show Command prompt gives you admin privileges. Just like in Linux.
-
Jonathan Hartley over 12 yearsNote 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 over 12 yearsThis 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 over 12 yearsThis 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 over 12 yearsMy problem solved by Brandon Donnelson's answer: In addition to the above, the user running "mklink" cannot be an administrator.
-
Jonathan Hartley over 12 yearsFor 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 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 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 almost 12 yearsThanks a lot! I feel so ignorant. I'm playing around with this in IDLE and this is the perfect solution.
-
Protagonist almost 12 yearsI 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 almost 12 yearsThe 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 areadline
method.readline
without parentheses refers to the method itself. Puttingreadline()
there would call the method prematurely, return a string, and submit that as the argument togenerate_tokens
. That's just not what we want; we want the method itself. -
Protagonist almost 12 yearsWow, thanks for the fast answer. I learned so much from this, I gotta wrap my head around it, it's fascinating. Thanks again!
-
Brilliand over 11 yearsYou 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 over 11 yearsJunctions 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 almost 11 yearsIt 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 about 9 yearsthis works for creating junctions but if creating sym links i still get the error message about not having sufficient permissions
-
mjaggard over 6 yearsWhy is windows so hard to automate? Where's the command line way to give the permission?
-
barlop over 6 yearsI think he knows about running as administrator that's why he is asking the question
-
barlop over 6 years-1 Try trying it yourself before posting it then you'd see it doesn't work
-
T.Todua over 5 yearsTo enable GP_EDIT, see this: superuser.com/a/105381/249349