summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohanna Äijälä <johanna.aijala@qt.io>2019-10-10 12:09:43 +0300
committerJohanna Äijälä <johanna.aijala@qt.io>2019-10-11 06:32:27 +0000
commit1b96174671cd5875c72783b79625848dc717d18c (patch)
tree0579dbe233c434ad9b2a91e1b5b7ea3d1a427c35
parentc706665c4f5efbe75633502b67c365be41d11a10 (diff)
Fix env variable remove on Windows
Removing env variable failed on uninstallation on Windows if the env variable value had @TargetDir@ in path. File separators got changed from Windows style to unix style. Update documentation to inform users to use '\\' as separators when setting a path as environment variable. Tested with following values (component.addElevatedOperation(...) in components.qs): "@TargetDir@\\lib\\system\\qtplugins" "not_a_path_but_variable_with_slash_\\qtplugins" "not_a_path_but_variable_with_slash_/qtplugins" "%SystemRoot%\\lib\\system\\qtplugins" "12345" Task-number: QTIFW-1148 Change-Id: Iaa48d890e70afdbe56bbf389dd4994d5ae91b316 Reviewed-by: Katja Marttila <katja.marttila@qt.io>
-rw-r--r--doc/operations.qdoc2
-rw-r--r--src/libs/installer/environmentvariablesoperation.cpp14
2 files changed, 14 insertions, 2 deletions
diff --git a/doc/operations.qdoc b/doc/operations.qdoc
index 762d12330..565180658 100644
--- a/doc/operations.qdoc
+++ b/doc/operations.qdoc
@@ -188,6 +188,8 @@
persistently. This is currently only supported on Windows.
If \c system is set to \c true, the persistent variable is set
system-wide, not only for the current user.
+ Note, if you set path to environment variable, use '\\' as separator, for example:
+ @Targetdir@\\lib\\system.
\row
\li RegisterFileType
\li "RegisterFileType" \c extension \c command [\c description [\c contentType [\c icon]]].
diff --git a/src/libs/installer/environmentvariablesoperation.cpp b/src/libs/installer/environmentvariablesoperation.cpp
index 006ea3762..1f3b56d52 100644
--- a/src/libs/installer/environmentvariablesoperation.cpp
+++ b/src/libs/installer/environmentvariablesoperation.cpp
@@ -152,8 +152,18 @@ UpdateOperation::Error undoSetting(const QString &regPath,
SettingsType registry(regPath, QSettingsWrapper::NativeFormat);
actual = registry.value(name).toString();
}
- if (actual != value) //key changed, don't undo
- return UpdateOperation::UserDefinedError;
+
+ if (actual != value)
+ {
+ //For unknown reason paths with @TargetDir@ variable get modified
+ //so that Windows file separators get replaced with unix style separators,
+ //fix separators before matching to actual value in register
+ QString tempValue = value;
+ QString fixedValue = tempValue.replace(QLatin1Char('/'), QLatin1Char('\\'));
+
+ if (actual != fixedValue) //key changed, don't undo
+ return UpdateOperation::UserDefinedError;
+ }
bool error = false;
if (handleRegExpandSz(regPath, name, oldValue, errorString, &error))