the patch file
Matthias schrieb am Donnerstag, 7. Januar 2021 um 18:51:50 UTC+1:
>
> I tried to post this already, I could not find it afterward. So if this
> message is duplcated, pardon me please.
>
> I would like to solve ab problem and have created a patch for it as basis
> for discussions.
>
> The problem, it can be reproduced the following way:
> - Windows with activated User Acces Control
> - local workspace, wich is checked out by someon else, eg. the admin.
> - you have insufficient rights to change files or the workspace metadata
> (.svn folder)
> - starting a TortoiseSvn-Operation by shell context menu, wich needs to
> write someting to the workspace or workspace-meta-DB (.svn-Folder)
>
> Result:
> operations fails with error messages. (for example "Can't add files to
> ignore list")
> Starting explorer in admin mode does not help. Shell context menu commands
> will nevertheless run in lower prileges. I'm not sure why, but I guess this
> is because TortoiseSvn-Shell starts TortoiseSvnProc as a new proccess.
>
> Workaround:
> You can start another tool, e.g. Notepad++ in Adminstrator mode and
> perform the operations in its file dialog. (e.g. in "Save file as..")
> But this is very annoying because this means a lot of extra clicks. If you
> forget it your operations fails. You might have do execute cleanup...
>
> My Idea:
> Enhance TortoiseSvn with a special mode, that executes all relevant
> commands with UAC elevation.
> The mode can be activated in TortoiseSvn-Advanced Settings.
> ("ElevateUACForLocalWorkspace")
>
> The patch file is based on the current trunk. (r29048)
> Where can I upload the patch?
>
>
--
You received this message because you are subscribed to the Google Groups
"TortoiseSVN-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/tortoisesvn-dev/42f42e5c-a8bc-44d0-a4a4-1d7c3c80b656n%40googlegroups.com.
Index: doc/source/en/TortoiseSVN/tsvn_dug/dug_settings_advanced.xml
===================================================================
--- doc/source/en/TortoiseSVN/tsvn_dug/dug_settings_advanced.xml
(revision 29048)
+++ doc/source/en/TortoiseSVN/tsvn_dug/dug_settings_advanced.xml
(working copy)
@@ -201,6 +201,18 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term condition="pot">ElevateUACForLocalWorkspace</term>
+ <listitem>
+ <para>
+ If you are working on workspaces wich needs a higher level of
+ Windows User Access Control set the value to <literal>true</literal>.
+ </para>
+ <para>
+ All shell context menu commands wich might change the local worksace
will ask for admin rights.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term condition="pot">FixCaseRenames</term>
<listitem>
<para>
Index: src/TortoiseProc/Settings/SettingsAdvanced.cpp
===================================================================
--- src/TortoiseProc/Settings/SettingsAdvanced.cpp (revision 29048)
+++ src/TortoiseProc/Settings/SettingsAdvanced.cpp (working copy)
@@ -93,6 +93,10 @@
settings[i].type = CSettingsAdvanced::SettingTypeNumber;
settings[i++].def.l = 3;
+ settings[i].sName = L"ElevateUACForLocalWorkspace";
+ settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
+ settings[i++].def.b = false;
+
settings[i].sName = L"FixCaseRenames";
settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
settings[i++].def.b = true;
Index: src/TortoiseShell/ContextMenu.cpp
===================================================================
--- src/TortoiseShell/ContextMenu.cpp (revision 29048)
+++ src/TortoiseShell/ContextMenu.cpp (working copy)
@@ -39,183 +39,183 @@
CShellExt::MenuInfo CShellExt::menuInfo[] =
{
{ ShellMenuCheckout, MENUCHECKOUT, IDI_CHECKOUT,
IDS_MENUCHECKOUT, IDS_MENUDESCCHECKOUT,
- { ITEMIS_FOLDER | ITEMIS_ONLYONE, ITEMIS_INSVN | ITEMIS_FOLDERINSVN }, {
ITEMIS_FOLDER | ITEMIS_ONLYONE | ITEMIS_EXTENDED | ITEMIS_INSVN |
ITEMIS_FOLDERINSVN, 0 }, { 0, 0 }, { 0, 0 }, L"tsvn_checkout" },
+ { ITEMIS_FOLDER | ITEMIS_ONLYONE, ITEMIS_INSVN | ITEMIS_FOLDERINSVN }, {
ITEMIS_FOLDER | ITEMIS_ONLYONE | ITEMIS_EXTENDED | ITEMIS_INSVN |
ITEMIS_FOLDERINSVN, 0 }, { 0, 0 }, { 0, 0 }, L"tsvn_checkout", true },
{ ShellMenuUpgradeWC, MENUUPGRADE, IDI_CLEANUP,
IDS_MENUUPGRADE, IDS_MENUDESCUPGRADE,
- {ITEMIS_UNSUPPORTEDFORMAT, 0}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_upgradewc" },
+ {ITEMIS_UNSUPPORTEDFORMAT, 0}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_upgradewc", true },
{ ShellMenuUpdate, MENUUPDATE, IDI_UPDATE,
IDS_MENUUPDATE, IDS_MENUDESCUPDATE,
- {ITEMIS_INSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_update"
},
+ {ITEMIS_INSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_update",
true },
{ ShellMenuCommit, MENUCOMMIT, IDI_COMMIT,
IDS_MENUCOMMIT, IDS_MENUDESCCOMMIT,
- {ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_commit" },
+ {ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_commit", true },
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}},
{ ShellMenuDiff, MENUDIFF, IDI_DIFF,
IDS_MENUDIFF, IDS_MENUDESCDIFF,
- {ITEMIS_INSVN|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_TWO, 0},
{ITEMIS_PROPMODIFIED, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, L"tsvn_diff" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_TWO, 0},
{ITEMIS_PROPMODIFIED, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, L"tsvn_diff", true },
{ ShellMenuDiffLater, MENUDIFFLATER, IDI_DIFF,
IDS_MENUDIFFLATER, IDS_MENUDESCDIFFLATER,
- {ITEMIS_ONLYONE, ITEMIS_FOLDER}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_difflater" },
+ {ITEMIS_ONLYONE, ITEMIS_FOLDER}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_difflater", false },
{ ShellMenuDiffNow, MENUDIFFNOW, IDI_DIFF,
IDS_MENUDIFFNOW, IDS_MENUDESCDIFFNOW,
- {ITEMIS_ONLYONE|ITEMIS_HASDIFFLATER, ITEMIS_FOLDER}, {0, 0}, {0, 0},
{0, 0}, L"tsvn_diffnow" },
+ {ITEMIS_ONLYONE|ITEMIS_HASDIFFLATER, ITEMIS_FOLDER}, {0, 0}, {0, 0},
{0, 0}, L"tsvn_diffnow", false },
{ ShellMenuPrevDiff, MENUPREVDIFF, IDI_DIFF,
IDS_MENUPREVDIFF, IDS_MENUDESCPREVDIFF,
- {ITEMIS_INSVN|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_prevdiff" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_prevdiff", false },
{ ShellMenuUrlDiff, MENUURLDIFF, IDI_DIFF,
IDS_MENUURLDIFF, IDS_MENUDESCURLDIFF,
- {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED|ITEMIS_ONLYONE,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_urldiff" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED|ITEMIS_ONLYONE,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_urldiff", false },
{ ShellMenuUnifiedDiff, MENUUNIDIFF, IDI_DIFF,
IDS_MENUUNIDIFF, IDS_MENUUNIDESCDIFF,
- {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_unifieddiff" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_unifieddiff", false },
{ ShellMenuLog, MENULOG, IDI_LOG,
IDS_MENULOG, IDS_MENUDESCLOG,
- {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_ADDEDWITHHISTORY|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0,
0}, L"tsvn_log" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_ADDEDWITHHISTORY|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0,
0}, L"tsvn_log", false },
{ ShellMenuRepoBrowse, MENUREPOBROWSE,
IDI_REPOBROWSE, IDS_MENUREPOBROWSE, IDS_MENUDESCREPOBROWSE,
- {ITEMIS_ONLYONE, 0}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_repobrowse" },
+ {ITEMIS_ONLYONE, 0}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_repobrowse", false },
{ ShellMenuShowChanged, MENUSHOWCHANGED,
IDI_SHOWCHANGED, IDS_MENUSHOWCHANGED, IDS_MENUDESCSHOWCHANGED,
- {ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_showchanged"},
+ {ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_showchanged", false },
{ ShellMenuRevisionGraph, MENUREVISIONGRAPH,
IDI_REVISIONGRAPH, IDS_MENUREVISIONGRAPH, IDS_MENUDESCREVISIONGRAPH,
- {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE,
ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_revisiongraph"},
+ {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE,
ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_revisiongraph",
false },
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
{ ShellMenuConflictEditor, MENUCONFLICTEDITOR, IDI_CONFLICT,
IDS_MENUCONFLICT, IDS_MENUDESCCONFLICT,
- {ITEMIS_CONFLICTED, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_conflicteditor" },
+ {ITEMIS_CONFLICTED, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_conflicteditor", true },
{ ShellMenuResolve, MENURESOLVE, IDI_RESOLVE,
IDS_MENURESOLVE, IDS_MENUDESCRESOLVE,
- {ITEMIS_CONFLICTED, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_resolve" },
+ {ITEMIS_CONFLICTED, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_resolve", true },
{ ShellMenuUpdateExt, MENUUPDATEEXT, IDI_UPDATE,
IDS_MENUUPDATEEXT, IDS_MENUDESCUPDATEEXT,
- {ITEMIS_INSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_updateext" },
+ {ITEMIS_INSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_updateext", true },
{ ShellMenuRename, MENURENAME, IDI_RENAME,
IDS_MENURENAME, IDS_MENUDESCRENAME,
- {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_INVERSIONEDFOLDER,
ITEMIS_FILEEXTERNAL|ITEMIS_WCROOT|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
{0, 0}, L"tsvn_rename" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_INVERSIONEDFOLDER,
ITEMIS_FILEEXTERNAL|ITEMIS_WCROOT|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
{0, 0}, L"tsvn_rename", true },
{ ShellMenuRemove, MENUREMOVE, IDI_DELETE,
IDS_MENUREMOVE, IDS_MENUDESCREMOVE,
- {ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER,
ITEMIS_ADDED|ITEMIS_FILEEXTERNAL|ITEMIS_WCROOT|ITEMIS_UNSUPPORTEDFORMAT}, {0,
0}, {0, 0}, {0, 0}, L"tsvn_remove" },
+ {ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER,
ITEMIS_ADDED|ITEMIS_FILEEXTERNAL|ITEMIS_WCROOT|ITEMIS_UNSUPPORTEDFORMAT}, {0,
0}, {0, 0}, {0, 0}, L"tsvn_remove", true },
{ ShellMenuRemoveKeep, MENUREMOVE, IDI_DELETE,
IDS_MENUREMOVEKEEP, IDS_MENUDESCREMOVEKEEP,
- {ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER|ITEMIS_EXTENDED,
ITEMIS_ADDED|ITEMIS_WCROOT|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_removekeep" },
+ {ITEMIS_INSVN|ITEMIS_INVERSIONEDFOLDER|ITEMIS_EXTENDED,
ITEMIS_ADDED|ITEMIS_WCROOT|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_removekeep", true },
{ ShellMenuRevert, MENUREVERT, IDI_REVERT,
IDS_MENUREVERT, IDS_MENUDESCREVERT,
- {ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_revert" },
+ {ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_revert", true },
{ ShellMenuRevert, MENUREVERT, IDI_REVERT,
IDS_MENUUNDOADD, IDS_MENUDESCUNDOADD,
- {ITEMIS_ADDED, ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN|ITEMIS_ADDED, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_revert" },
+ {ITEMIS_ADDED, ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN|ITEMIS_ADDED, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_revert", true },
{ ShellMenuDelUnversioned, MENUDELUNVERSIONED,
IDI_DELUNVERSIONED, IDS_MENUDELUNVERSIONED, IDS_MENUDESCDELUNVERSIONED,
- {ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_delunversioned" },
+ {ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_delunversioned", true },
{ ShellMenuCleanup, MENUCLEANUP, IDI_CLEANUP,
IDS_MENUCLEANUP, IDS_MENUDESCCLEANUP,
- {ITEMIS_INSVN|ITEMIS_FOLDER, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN|ITEMIS_FOLDER, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_cleanup" },
+ {ITEMIS_INSVN|ITEMIS_FOLDER, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN|ITEMIS_FOLDER, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_cleanup", true },
{ ShellMenuLock, MENULOCK, IDI_LOCK,
IDS_MENU_LOCK, IDS_MENUDESC_LOCK,
- {ITEMIS_INSVN, ITEMIS_LOCKED|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_LOCKED|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0,
0}, {0, 0}, L"tsvn_lock" },
+ {ITEMIS_INSVN, ITEMIS_LOCKED|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_LOCKED|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0,
0}, {0, 0}, L"tsvn_lock", true },
{ ShellMenuUnlock, MENUUNLOCK, IDI_UNLOCK,
IDS_MENU_UNLOCK, IDS_MENUDESC_UNLOCK,
- {ITEMIS_INSVN|ITEMIS_LOCKED, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, L"tsvn_unlock" },
+ {ITEMIS_INSVN|ITEMIS_LOCKED, ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, L"tsvn_unlock", true },
{ ShellMenuUnlockForce, MENUUNLOCK, IDI_UNLOCK,
IDS_MENU_UNLOCKFORCE, IDS_MENUDESC_UNLOCKFORCE,
- {ITEMIS_INSVN|ITEMIS_LOCKED|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_unlockforce" },
+ {ITEMIS_INSVN|ITEMIS_LOCKED|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDER|ITEMIS_INSVN|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_unlockforce", true },
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
{ ShellMenuCopy, MENUCOPY, IDI_COPY,
IDS_MENUBRANCH, IDS_MENUDESCCOPY,
- {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{0, 0}, {0, 0}, L"tsvn_copy" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{0, 0}, {0, 0}, L"tsvn_copy", true },
{ ShellMenuSwitch, MENUSWITCH, IDI_SWITCH,
IDS_MENUSWITCH, IDS_MENUDESCSWITCH,
- {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{0, 0}, {0, 0}, L"tsvn_switch" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{0, 0}, {0, 0}, L"tsvn_switch", true },
{ ShellMenuMerge, MENUMERGE, IDI_MERGE,
IDS_MENUMERGE, IDS_MENUDESCMERGE,
- {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{0, 0}, {0, 0}, L"tsvn_merge" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT},
{0, 0}, {0, 0}, L"tsvn_merge", true },
{ ShellMenuMergeAll, MENUMERGEALL, IDI_MERGE,
IDS_MENUMERGEALL, IDS_MENUDESCMERGEALL,
- {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_mergeall" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_EXTENDED,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_mergeall", true },
{ ShellMenuExport, MENUEXPORT, IDI_EXPORT,
IDS_MENUEXPORT, IDS_MENUDESCEXPORT,
{ITEMIS_FOLDER|ITEMIS_ONLYONE, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0,
0}, {0, 0}, L"tsvn_export" },
{ ShellMenuRelocate, MENURELOCATE, IDI_RELOCATE,
IDS_MENURELOCATE, IDS_MENUDESCRELOCATE,
-
{ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_WCROOT,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_WCROOT,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_relocate" },
+
{ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_WCROOT,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_FOLDERINSVN|ITEMIS_ONLYONE|ITEMIS_WCROOT,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_relocate", true },
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
{ ShellMenuCreateRepos, MENUCREATEREPOS,
IDI_CREATEREPOS, IDS_MENUCREATEREPOS, IDS_MENUDESCCREATEREPOS,
- {ITEMIS_FOLDER|ITEMIS_ONLYONE, ITEMIS_INSVN|ITEMIS_FOLDERINSVN}, {0,
0}, {0, 0}, {0, 0}, L"tsvn_createrepo" },
+ {ITEMIS_FOLDER|ITEMIS_ONLYONE, ITEMIS_INSVN|ITEMIS_FOLDERINSVN}, {0,
0}, {0, 0}, {0, 0}, L"tsvn_createrepo", true },
{ ShellMenuAdd, MENUADD, IDI_ADD,
IDS_MENUADD, IDS_MENUDESCADD,
- {ITEMIS_INVERSIONEDFOLDER|ITEMIS_FOLDER,
ITEMIS_INSVN|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_INSVN|ITEMIS_FOLDER,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_IGNORED|ITEMIS_FOLDER,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_DELETED,
ITEMIS_FOLDER|ITEMIS_ONLYONE|ITEMIS_UNSUPPORTEDFORMAT}, L"tsvn_add" },
+ {ITEMIS_INVERSIONEDFOLDER|ITEMIS_FOLDER,
ITEMIS_INSVN|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_INSVN|ITEMIS_FOLDER,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_IGNORED|ITEMIS_FOLDER,
ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_DELETED,
ITEMIS_FOLDER|ITEMIS_ONLYONE|ITEMIS_UNSUPPORTEDFORMAT}, L"tsvn_add", true },
{ ShellMenuAdd, MENUADD, IDI_ADD,
IDS_MENUADDIMMEDIATE, IDS_MENUDESCADD,
- {ITEMIS_INVERSIONEDFOLDER,
ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {ITEMIS_IGNORED,
ITEMIS_FOLDER|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_DELETED,
ITEMIS_FOLDER|ITEMIS_ONLYONE|ITEMIS_UNSUPPORTEDFORMAT}, L"tsvn_add" },
+ {ITEMIS_INVERSIONEDFOLDER,
ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {ITEMIS_IGNORED,
ITEMIS_FOLDER|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_DELETED,
ITEMIS_FOLDER|ITEMIS_ONLYONE|ITEMIS_UNSUPPORTEDFORMAT}, L"tsvn_add", true },
{ ShellMenuAddAsReplacement, MENUADD, IDI_ADD,
IDS_MENUADDASREPLACEMENT, IDS_MENUADDASREPLACEMENT,
- {ITEMIS_DELETED|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_addasreplacement" },
+ {ITEMIS_DELETED|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_addasreplacement", true },
{ ShellMenuImport, MENUIMPORT, IDI_IMPORT,
IDS_MENUIMPORT, IDS_MENUDESCIMPORT,
- {ITEMIS_FOLDER, ITEMIS_INSVN}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_import"
},
+ {ITEMIS_FOLDER, ITEMIS_INSVN}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_import",
false },
{ ShellMenuBlame, MENUBLAME, IDI_BLAME,
IDS_MENUBLAME, IDS_MENUDESCBLAME,
- {ITEMIS_INSVN|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_blame" },
+ {ITEMIS_INSVN|ITEMIS_ONLYONE,
ITEMIS_FOLDER|ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_blame", false },
{ ShellMenuCopyUrl, MENUCOPYURL, IDI_COPYURL,
IDS_MENUCOPYURL, IDS_MENUDESCCOPYURL,
- { ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT }, { 0, 0 }, { 0, 0 }, { 0, 0
}, L"tsvn_copyurl" },
+ { ITEMIS_INSVN, ITEMIS_UNSUPPORTEDFORMAT }, { 0, 0 }, { 0, 0 }, { 0, 0
}, L"tsvn_copyurl", false },
{ ShellMenuIgnoreSub, MENUIGNORE, IDI_IGNORE,
IDS_MENUIGNORE, IDS_MENUDESCIGNORE,
- {ITEMIS_INVERSIONEDFOLDER,
ITEMIS_IGNORED|ITEMIS_INSVN|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_ignoresub" },
+ {ITEMIS_INVERSIONEDFOLDER,
ITEMIS_IGNORED|ITEMIS_INSVN|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_ignoresub", true },
{ ShellMenuDeleteIgnoreSub, MENUIGNORE, IDI_IGNORE,
IDS_MENUDELETEIGNORE, IDS_MENUDESCDELETEIGNORE,
- {ITEMIS_INVERSIONEDFOLDER|ITEMIS_INSVN,
ITEMIS_IGNORED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_deleteignoresub" },
+ {ITEMIS_INVERSIONEDFOLDER|ITEMIS_INSVN,
ITEMIS_IGNORED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0},
L"tsvn_deleteignoresub", true },
{ ShellMenuUnIgnoreSub, MENUIGNORE, IDI_IGNORE,
IDS_MENUUNIGNORE, IDS_MENUDESCUNIGNORE,
- {ITEMIS_IGNORED, 0}, {0, 0}, {0, 0}, {0, 0} , L"tsvn_unignoresub"},
+ {ITEMIS_IGNORED, 0}, {0, 0}, {0, 0}, {0, 0} , L"tsvn_unignoresub",
true},
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
{ ShellMenuShelve, MENUSHELVE, IDI_SHELVE,
IDS_MENUSHELVE, IDS_MENUDESCSHELVE,
- {ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_shelve"
},
+ {ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, L"tsvn_shelve",
true },
{ ShellMenuUnshelve, MENUUNSHELVE, IDI_UNSHELVE,
IDS_MENUUNSHELVE, IDS_MENUDESCUNSHELVE,
- {ITEMIS_INSVN, 0}, { 0, 0 }, { 0, 0 }, {0, 0}, L"tsvn_unshelve" },
+ {ITEMIS_INSVN, 0}, { 0, 0 }, { 0, 0 }, {0, 0}, L"tsvn_unshelve", true
},
{ ShellMenuCreatePatch, MENUCREATEPATCH,
IDI_CREATEPATCH, IDS_MENUCREATEPATCH, IDS_MENUDESCCREATEPATCH,
- {ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_createpatch" },
+ {ITEMIS_INSVN, ITEMIS_NORMAL|ITEMIS_UNSUPPORTEDFORMAT},
{ITEMIS_FOLDERINSVN, ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0},
L"tsvn_createpatch", false },
{ ShellMenuApplyPatch, MENUAPPLYPATCH, IDI_PATCH,
IDS_MENUAPPLYPATCH, IDS_MENUDESCAPPLYPATCH,
- {ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN,
ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0},
{ITEMIS_FOLDERINSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0},
L"tsvn_applypatch" },
+ {ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_FOLDERINSVN,
ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {ITEMIS_ONLYONE|ITEMIS_PATCHFILE, 0},
{ITEMIS_FOLDERINSVN, ITEMIS_ADDED|ITEMIS_UNSUPPORTEDFORMAT}, {0, 0},
L"tsvn_applypatch", true },
{ ShellMenuProperties, MENUPROPERTIES,
IDI_PROPERTIES, IDS_MENUPROPERTIES, IDS_MENUDESCPROPERTIES,
- {ITEMIS_INSVN, 0}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0},
L"tsvn_properties" },
+ {ITEMIS_INSVN, 0}, {ITEMIS_FOLDERINSVN, 0}, {0, 0}, {0, 0},
L"tsvn_properties", true },
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
{ ShellMenuClipPaste, MENUCLIPPASTE, IDI_CLIPPASTE,
IDS_MENUCLIPPASTE, IDS_MENUDESCCLIPPASTE,
- {ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_clippaste" },
+ {ITEMIS_INSVN|ITEMIS_FOLDER|ITEMIS_PATHINCLIPBOARD,
ITEMIS_UNSUPPORTEDFORMAT}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_clippaste", true },
{ ShellSeparator, 0, 0, 0, 0, {0, 0}, {0, 0}, {0, 0}, {0, 0}, L""},
{ ShellMenuSettings, MENUSETTINGS, IDI_SETTINGS,
IDS_MENUSETTINGS, IDS_MENUDESCSETTINGS,
- {ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0},
L"tsvn_settings" },
+ {ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0},
L"tsvn_settings", false },
{ ShellMenuHelp, MENUHELP, IDI_HELP,
IDS_MENUHELP, IDS_MENUDESCHELP,
- {ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0}, L"tsvn_help" },
+ {ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0}, L"tsvn_help",
false },
{ ShellMenuAbout, MENUABOUT, IDI_ABOUT,
IDS_MENUABOUT, IDS_MENUDESCABOUT,
- {ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0}, L"tsvn_about"
},
+ {ITEMIS_FOLDER, 0}, {0, ITEMIS_FOLDER}, {0, 0}, {0, 0}, L"tsvn_about",
false },
// the sub menus - they're not added like the the commands, therefore the
menu ID is zero
// but they still need to be in here, because we use the icon and string
information anyway.
{ ShellSubMenu, NULL, IDI_APP,
IDS_MENUSUBMENU, 0,
- {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenu" },
+ {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenu", false },
{ ShellSubMenuFile, NULL, IDI_MENUFILE,
IDS_MENUSUBMENU, 0,
- {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenufile" },
+ {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenufile", false },
{ ShellSubMenuFolder, NULL,
IDI_MENUFOLDER, IDS_MENUSUBMENU, 0,
- {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenufolder" },
+ {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenufolder", false },
{ ShellSubMenuLink, NULL, IDI_MENULINK,
IDS_MENUSUBMENU, 0,
- {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenulink" },
+ {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenulink", false },
{ ShellSubMenuMultiple, NULL,
IDI_MENUMULTIPLE, IDS_MENUSUBMENU, 0,
- {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenumultiple" },
+ {0, 0}, {0, 0}, {0, 0}, {0, 0}, L"tsvn_submenumultiple", false },
// mark the last entry to tell the loop where to stop iterating over this
array
{ ShellMenuLastEntry, 0, 0,
0, 0,
{0, 0}, {0, 0}, {0, 0}, {0, 0}, L"" },
@@ -1333,6 +1333,15 @@
tstring tortoiseProcPath = GetAppDirectory() + L"TortoiseProc.exe";
tstring tortoiseMergePath = GetAppDirectory() + L"TortoiseMerge.exe";
tstring cwdFolder;
+ boolean elevateUAC = false;
+ for (int menuIndex = 0; menuInfo[menuIndex].command !=
ShellMenuLastEntry; menuIndex++)
+ {
+ if (menuInfo[menuIndex].command == (SVNCommands)id_it->second)
+ {
+ elevateUAC = menuInfo[menuIndex].elevateUAC;
+ break;
+ }
+ }
if (folder_.empty() && files_.empty())
{
// use the users desktop path as the CWD
@@ -1686,7 +1695,7 @@
myIDMap.clear();
myVerbsIDMap.clear();
myVerbsMap.clear();
- RunCommand(tortoiseMergePath, svnCmd, cwdFolder, L"TortoiseMerge
launch failed" );
+ RunCommand(tortoiseMergePath, svnCmd, cwdFolder, L"TortoiseMerge
launch failed", elevateUAC);
return S_OK;
case ShellMenuRevisionGraph:
AddPathCommand(svnCmd, L"revisiongraph", true);
@@ -1769,7 +1778,7 @@
myIDMap.clear();
myVerbsIDMap.clear();
myVerbsMap.clear();
- RunCommand(tortoiseProcPath, svnCmd, cwdFolder, L"TortoiseProc
Launch failed");
+ RunCommand(tortoiseProcPath, svnCmd, cwdFolder, L"TortoiseProc
Launch failed", elevateUAC);
}
return S_OK;
} // if (id_it != myIDMap.end() && id_it->first == idCmd)
@@ -2429,14 +2438,30 @@
}
void CShellExt::RunCommand(const tstring& path, const tstring& command,
- const tstring& folder, LPCTSTR errorMessage)
+ const tstring& folder, LPCTSTR errorMessage, boolean elevateUAC)
{
- if (CCreateProcessHelper::CreateProcessDetached(path.c_str(),
- command.c_str(), folder.c_str()))
+ bool settingElevateUAC =
+ !!CRegDWORD(L"Software\\TortoiseSVN\\ElevateUACForLocalWorkspace",
FALSE);
+
+ if (settingElevateUAC && elevateUAC)
{
- // process started - exit
- return;
+ if (CCreateProcessHelper::ShellExecuteDetachted(path.c_str(),
+ command.c_str(), folder.c_str(), true),
+ elevateUAC)
+ {
+ // process started - exit
+ return;
+ }
}
+ else
+ {
+ if (CCreateProcessHelper::CreateProcessDetached(path.c_str(),
+ command.c_str(), folder.c_str()))
+ {
+ // process started - exit
+ return;
+ }
+ }
CFormatMessageWrapper errorDetails;
MessageBox( NULL, errorDetails, errorMessage, MB_OK | MB_ICONINFORMATION );
Index: src/TortoiseShell/ShellExt.h
===================================================================
--- src/TortoiseShell/ShellExt.h (revision 29048)
+++ src/TortoiseShell/ShellExt.h (working copy)
@@ -181,6 +181,8 @@
YesNoPair third;
YesNoPair fourth;
std::wstring verb;
+ //if true run commands in UAC higher priveleges, if enhancend in
advanced settings
+ bool elevateUAC;
};
static MenuInfo menuInfo[];
@@ -232,7 +234,7 @@
void GetMainColumnStatus(const TCHAR * path, BOOL bIsDir);
STDMETHODIMP QueryDropContext(UINT uFlags, UINT idCmdFirst, HMENU
hMenu, UINT &indexMenu);
bool IsIllegalFolder(const std::wstring& folder, int *
csidlarray);
- static void RunCommand( const tstring& path, const tstring& command,
const tstring& folder, LPCTSTR errorMessage );
+ static void RunCommand( const tstring& path, const tstring& command,
const tstring& folder, LPCTSTR errorMessage, boolean elevateUAC);
bool ShouldInsertItem(const MenuInfo& pair) const;
bool ShouldEnableMenu(const YesNoPair& pair) const;
void GetColumnInfo(SHCOLUMNINFO* to, DWORD index, UINT
charactersCount, UINT titleId, UINT descriptionId);
Index: src/Utils/CreateProcessHelper.h
===================================================================
--- src/Utils/CreateProcessHelper.h (revision 29048)
+++ src/Utils/CreateProcessHelper.h (working copy)
@@ -39,6 +39,10 @@
LPCTSTR lpCurrentDirectory);
static bool CreateProcessDetached(LPCTSTR lpApplicationName,
LPCTSTR lpCommandLine);
+
+ static bool ShellExecuteDetachted(LPCTSTR lpApplicationName,
+ LPCTSTR lpCommandLine,
+ LPCTSTR lpCurrentDirectory, boolean elevateUAC);
};
inline bool CCreateProcessHelper::CreateProcess(LPCTSTR applicationName,
@@ -97,6 +101,29 @@
return true;
}
+inline bool CCreateProcessHelper::ShellExecuteDetachted(LPCTSTR
lpApplicationName,
+ LPCTSTR lpCommandLine, LPCTSTR lpCurrentDirectory, boolean elevateUAC)
+{
+
+ SHELLEXECUTEINFO shExInfo = {0};
+ shExInfo.cbSize = sizeof(shExInfo);
+ shExInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
+ shExInfo.hwnd = 0;
+ shExInfo.lpFile = lpApplicationName;
+ shExInfo.lpParameters = lpCommandLine;
+ shExInfo.lpDirectory = lpCurrentDirectory;
+ shExInfo.nShow = SW_SHOW;
+ shExInfo.hInstApp = 0;
+ if (elevateUAC)
+ shExInfo.lpVerb = _T("runas");
+
+ if (ShellExecuteEx(&shExInfo))
+ if (shExInfo.hProcess != 0)
+ CloseHandle(shExInfo.hProcess);
+
+ return true;
+}
+
inline bool CCreateProcessHelper::CreateProcessDetached(LPCTSTR
lpApplicationName,
LPCTSTR lpCommandLine)
{