Talk:UAC plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
(→‎UNC paths: Added my comment (and signed my first comment))
Line 68: Line 68:
== UNC paths ==
== UNC paths ==


I've been using this in the [http://portableapps.com/node/22364 PortableApps.com Launcher], and it's causing failure to find files in the inner instance; today I've tracked that down to the fact that it's apparently turning a perfectly good local path into a UNC path, which the Launcher explicitly can't cope with due to drive letter replacements for portability. Can I avoid these UNC paths in any way, or do I need to convert them back myself (which is messy as there's no Windows API DLL call for this direction) and then use a different variable to $EXEDIR all the way through the script?
I've been using this in the [http://portableapps.com/node/22364 PortableApps.com Launcher], and it's causing failure to find files in the inner instance; today I've tracked that down to the fact that it's apparently turning a perfectly good local path into a UNC path, which the Launcher explicitly can't cope with due to drive letter replacements for portability. Can I avoid these UNC paths in any way, or do I need to convert them back myself (which is messy as there's no Windows API DLL call for this direction) and then use a different variable to $EXEDIR all the way through the script? -- [[User:ChrisMorgan|ChrisMorgan]]


Where does this UNC path come from? I don't know what you mean by "drive letter replacements" but remember that mapped drives (probably subst also) are per user and UAC elevation can happen with a different user without these mappings --[[User:Anders|Anders]] 18:16, 25 February 2010 (UTC)
Where does this UNC path come from? I don't know what you mean by "drive letter replacements" but remember that mapped drives (probably subst also) are per user and UAC elevation can happen with a different user without these mappings --[[User:Anders|Anders]] 18:16, 25 February 2010 (UTC)
:On thinking the issue over, I came up with a different solution; I created an environment variable and if $EXEDIR 2 is \\ then it does ReadEnvStr $EXEDIR (I discovered that $EXEDIR is actually writable, even if not advertised as such), so for the moment I'm OK. I still can't understand why it's running a UNC path. (I can't test it properly on Wine, Wine reports 1233 straight away and so you never need/get an inner instance.) What happened was a tester ran R:\PortableApps.comLauncher.exe; R: was a share to \\dxp\r. The outer instance reported $EXEDIR as R:, but the inner instance reported $EXEDIR to be \\dxp\r. I haven't yet had it tested on a local path, but it has been said that it doesn't work - I suspect that it'll turn it into \\?\ or something like that.
:By "drive letter replacements" I meant e.g. searching for W:\ and replacing it with X:\ in a file, so that a portable application can keep things across drive letters. This is a normal technique at PortableApps.com. -- [[User:ChrisMorgan|ChrisMorgan]] 03:18, 26 February 2010 (UTC)

Revision as of 03:18, 26 February 2010

Awesome stuff. Used and approved.


In a domain-based network it is important to provide credentials with standart "user\domain" form (as it is displayed into runas dialog and many other places in system). Unfortunally used function CreateProcessWithLogonW() uses different form of this - "user@domain" :( So...we need a to deal with this and provide onthefly conversion. I suggest add this pice of code immediately before CreateProcessWithLogonW call (RunAs.cpp):

#include <wchar.h>
if(swscanf(wszUName, L"%s\\%s", wszDomain, wszUser) > 1)
{
 wcscpy(wszUName, wszUser);
 wcscat(wszUName, L"@");
 wcscat(wszUName, wszDomain);
}

--Anders 01:11, 25 September 2007 (PDT) RunAs.cpp is only used if the user is non admin,running on Vista with UAC off (And it is only there since the built in RunAs seems to be broken) I don't have a domain to test on, but I will try to look into this

--Anders 02:04, 25 September 2007 (PDT) Is "\\machine\user" a legal credentials form? what about "\\domain\user"? Please try test build @ http://rapidshare.com/files/58108814/UAC_v0.0.6c_TestBuild.zip.html and report back

Anders 16:26, 13 October 2007 (PDT) Fix now added to new build (v0.0.6c), old version can be found @ http://stashbox.org/43690/UAC%20v0.0.6b.zip

new UAC build works very good in 'domain networks' enviroment! Thank you very much for developing!


  • I found interesting new thing...How about members of 'Power users' group ?

According to MSDN documentation - members of this group have many available actions... for example register COM and ActiveX objects (regsvr32.exe my.dll ....), complete write access to 'programm files' directory... I think not all installers required *strictly* admin privelegues...

Maybe function who test for 'administrators' privelegue can test for 'power users' and indicate its presence ?

--Anders 20:59, 22 October 2007 (PDT) First off, the power users group is not really supposed to be used anymore. But, there is nothing in the UAC plugin that says you have to be admin(IIRC), you are already doing the admin check yourself in your .OnInit, you could call the UserInfo plugin instead of checking the "admin register" to allow power users (I'm not sure if this will work on Vista with UAC on, only admins are listed in the UAC dialog AFAIK. On pre Vista or UAC off, there should be no problems(This has never been tested, YMMV))


  • Another interesting thing: Perhaps this is outside your control but when you try to elevate your permissions using an Admin account which uses a blank password (i.e. "") there is a windows error that states the admin account must have a non blank password. -Brad (brad@jittr.net)

--Anders 03:20, 31 October 2007 (PDT) http://forums.winamp.com/showthread.php?postid=2189159#post2189159


UAC error codes

I tried two of the example programs on a "Virtual Vista" machine. They both failed. I got an "unable to elevate, error 87" error. Is there a list of error codes someplace where we can look up an error to try and figure out what's wrong?

--Anders 10:57, 18 February 2008 (PST) Error codes are just normal windows error codes from GetLastError, please upload a script with this problem so I can take a look at it

Install instructions

I just added some basic instructions on how to install into NSIS, because the 'A' and 'U' directories had me flummoxed for a bit (obvious now, of course!). Maybe there could be a README entry on this, too, and perhaps rename them "ANSI" and "Unicode" for the hard of thinking? But anyway, this is a great solution to an otherwise nightmarish problem - thanks! Paul Clark 82.68.4.230 10:00, 22 July 2009 (UTC)

How to suppress UAC

I am working on a installer needs run automatically, without any user control. But the UAC pop-up will always be there, if the UAC is on. Is there a way to suppress the UAC pop-ups?

To perform admin tasks, elevation is required, that is the whole point of UAC. If you don't need admin rights, use RequestExecutionLevel User (And don't use the UAC plugin) --Anders 20:51, 7 October 2009 (UTC)

Possible problem with Guest user under Windows Xp

In the function SysQuery_IsServiceRunning(), the call to OpenSCManager() fails if executed by Guest user. The cause seems to be that the Guest is a special user (less than limited user) that can not to connect to the Service Control Manager. Avoiding such check, the install works also for Guest user.

UNC paths

I've been using this in the PortableApps.com Launcher, and it's causing failure to find files in the inner instance; today I've tracked that down to the fact that it's apparently turning a perfectly good local path into a UNC path, which the Launcher explicitly can't cope with due to drive letter replacements for portability. Can I avoid these UNC paths in any way, or do I need to convert them back myself (which is messy as there's no Windows API DLL call for this direction) and then use a different variable to $EXEDIR all the way through the script? -- ChrisMorgan

Where does this UNC path come from? I don't know what you mean by "drive letter replacements" but remember that mapped drives (probably subst also) are per user and UAC elevation can happen with a different user without these mappings --Anders 18:16, 25 February 2010 (UTC)

On thinking the issue over, I came up with a different solution; I created an environment variable and if $EXEDIR 2 is \\ then it does ReadEnvStr $EXEDIR (I discovered that $EXEDIR is actually writable, even if not advertised as such), so for the moment I'm OK. I still can't understand why it's running a UNC path. (I can't test it properly on Wine, Wine reports 1233 straight away and so you never need/get an inner instance.) What happened was a tester ran R:\PortableApps.comLauncher.exe; R: was a share to \\dxp\r. The outer instance reported $EXEDIR as R:, but the inner instance reported $EXEDIR to be \\dxp\r. I haven't yet had it tested on a local path, but it has been said that it doesn't work - I suspect that it'll turn it into \\?\ or something like that.
By "drive letter replacements" I meant e.g. searching for W:\ and replacing it with X:\ in a file, so that a portable application can keep things across drive letters. This is a normal technique at PortableApps.com. -- ChrisMorgan 03:18, 26 February 2010 (UTC)