diff --git a/QuickLook.Common b/QuickLook.Common
index 5c035ca..4ea4cfc 160000
--- a/QuickLook.Common
+++ b/QuickLook.Common
@@ -1 +1 @@
-Subproject commit 5c035caf526ea90f9b2b6d15a9d7bbb5a9cd0b68
+Subproject commit 4ea4cfc971e8d218fbcc2a4ea662dcada8145117
diff --git a/QuickLook/App.xaml.cs b/QuickLook/App.xaml.cs
index ea739b9..cd70907 100644
--- a/QuickLook/App.xaml.cs
+++ b/QuickLook/App.xaml.cs
@@ -39,8 +39,9 @@ namespace QuickLook
public static readonly bool IsUWP = ProcessHelper.IsRunningAsUWP();
public static readonly bool IsWin10 = Environment.OSVersion.Version >= new Version(10, 0);
public static readonly bool IsGPUInBlacklist = SystemHelper.IsGPUInBlacklist();
+ public static readonly bool IsPortable = SettingHelper.IsPortableVersion();
- private bool _isFirstInstance;
+ private bool _cleanExit;
private Mutex _isRunning;
protected override void OnStartup(StartupEventArgs e)
@@ -55,26 +56,11 @@ namespace QuickLook
private void Application_Startup(object sender, StartupEventArgs e)
{
- if (ProcessHelper.IsOnWindows10S())
+ if (!EnsureOSVersion()
+ || !EnsureFirstInstance(e.Args)
+ || !EnsureFolderWritable(SettingHelper.LocalDataPath))
{
- MessageBox.Show("This application does not run on Windows 10 S.");
-
- Shutdown();
- return;
- }
-
- EnsureFirstInstance();
-
- if (!_isFirstInstance)
- {
- // second instance: preview this file
- if (e.Args.Any() && (Directory.Exists(e.Args.First()) || File.Exists(e.Args.First())))
- RemoteCallShowPreview(e);
- // second instance: duplicate
- else
- MessageBox.Show(TranslationHelper.Get("APP_SECOND_TEXT"), TranslationHelper.Get("APP_SECOND"),
- MessageBoxButton.OK, MessageBoxImage.Information);
-
+ _cleanExit = false;
Shutdown();
return;
}
@@ -84,7 +70,35 @@ namespace QuickLook
// first instance: run and preview this file
if (e.Args.Any() && (Directory.Exists(e.Args.First()) || File.Exists(e.Args.First())))
- RemoteCallShowPreview(e);
+ PipeServerManager.SendMessage(PipeMessages.Toggle, e.Args.First());
+ }
+
+ private bool EnsureOSVersion()
+ {
+ if (!ProcessHelper.IsOnWindows10S())
+ return true;
+
+ MessageBox.Show("This application does not run on Windows 10 S.");
+
+ return false;
+ }
+
+ private bool EnsureFolderWritable(string folder)
+ {
+ try
+ {
+ var path = FileHelper.CreateTempFile(folder);
+ File.Delete(path);
+ }
+ catch
+ {
+ MessageBox.Show(string.Format(TranslationHelper.Get("APP_PATH_NOT_WRITABLE"), folder), "QuickLook",
+ MessageBoxButton.OK, MessageBoxImage.Error);
+
+ return false;
+ }
+
+ return true;
}
private void CheckUpdate()
@@ -96,11 +110,6 @@ namespace QuickLook
SettingHelper.Set("LastUpdateTicks", DateTime.Now.Ticks);
}
- private void RemoteCallShowPreview(StartupEventArgs e)
- {
- PipeServerManager.SendMessage(PipeMessages.Toggle, e.Args.First());
- }
-
private void RunListener(StartupEventArgs e)
{
TrayIconManager.GetInstance();
@@ -119,7 +128,7 @@ namespace QuickLook
private void App_OnExit(object sender, ExitEventArgs e)
{
- if (!_isFirstInstance)
+ if (!_cleanExit)
return;
_isRunning.ReleaseMutex();
@@ -130,9 +139,24 @@ namespace QuickLook
ViewWindowManager.GetInstance().Dispose();
}
- private void EnsureFirstInstance()
+ private bool EnsureFirstInstance(string[] args)
{
- _isRunning = new Mutex(true, "QuickLook.App.Mutex", out _isFirstInstance);
+ _isRunning = new Mutex(true, "QuickLook.App.Mutex", out bool isFirst);
+
+ if (isFirst)
+ return true;
+
+ // second instance: preview this file
+ if (args.Any() && (Directory.Exists(args.First()) || File.Exists(args.First())))
+ {
+ PipeServerManager.SendMessage(PipeMessages.Toggle, args.First());
+ }
+ // second instance: duplicate
+ else
+ MessageBox.Show(TranslationHelper.Get("APP_SECOND_TEXT"), TranslationHelper.Get("APP_SECOND"),
+ MessageBoxButton.OK, MessageBoxImage.Information);
+
+ return false;
}
}
}
\ No newline at end of file
diff --git a/QuickLook/Translations.config b/QuickLook/Translations.config
index ad8ead5..77573e2 100644
--- a/QuickLook/Translations.config
+++ b/QuickLook/Translations.config
@@ -153,6 +153,7 @@
QuickLook is running in the background.
QuickLook is already running
QuickLook enables quick previewing of certain type of files by pressing the spacebar while it is highlighted.
+ Data path "{0}" is not writable. Please check if you have sufficient premission.
Browse {0}
Open {0}
Open with {0}
@@ -489,6 +490,7 @@
QuickLook 正在后台运行。
另一个 QuickLook 进程正在运行
在您选中文件并按下空格键时,QuickLook 将提供多种格式的快速预览。
+ 数据目录 "{0}" 不可写。请检查您是否有足够的权限。
浏览 {0}
打开 {0}
用 {0} 打开
@@ -514,6 +516,7 @@
QuickLook 正在背景執行
另一個 QuickLook 處理程序正在執行。
在資料夾中選取任意檔案並按下空白鍵,QuickLook 即可提供多種檔案格式的快速預覽。
+ 數據目錄 "{0}" 不可寫。請檢查您是否有足夠的權限。
瀏覽 {0}
開啟 {0}
使用 {0} 開啟
diff --git a/Scripts/pack-zip.ps1 b/Scripts/pack-zip.ps1
index c0869c7..b0b7bdc 100644
--- a/Scripts/pack-zip.ps1
+++ b/Scripts/pack-zip.ps1
@@ -2,5 +2,9 @@ $version = git describe --always --tags
Start-Sleep -s 1
+Write-Output "This file makes QuickLook portable." >> ..\Build\Package\portable.lock
+
Remove-Item ..\Build\QuickLook-$version.zip -ErrorAction SilentlyContinue
-Compress-Archive ..\Build\Package\* ..\Build\QuickLook-$version.zip
\ No newline at end of file
+Compress-Archive ..\Build\Package\* ..\Build\QuickLook-$version.zip
+
+Remove-Item ..\Build\Package\portable.lock
\ No newline at end of file