Fix #731: use app folder for saving data in the portable mode

This commit is contained in:
Paddy Xu
2020-09-20 13:32:52 +02:00
parent 7e29ddad46
commit 1d857ccc0f
4 changed files with 62 additions and 31 deletions

View File

@@ -39,8 +39,9 @@ namespace QuickLook
public static readonly bool IsUWP = ProcessHelper.IsRunningAsUWP(); public static readonly bool IsUWP = ProcessHelper.IsRunningAsUWP();
public static readonly bool IsWin10 = Environment.OSVersion.Version >= new Version(10, 0); public static readonly bool IsWin10 = Environment.OSVersion.Version >= new Version(10, 0);
public static readonly bool IsGPUInBlacklist = SystemHelper.IsGPUInBlacklist(); public static readonly bool IsGPUInBlacklist = SystemHelper.IsGPUInBlacklist();
public static readonly bool IsPortable = SettingHelper.IsPortableVersion();
private bool _isFirstInstance; private bool _cleanExit;
private Mutex _isRunning; private Mutex _isRunning;
protected override void OnStartup(StartupEventArgs e) protected override void OnStartup(StartupEventArgs e)
@@ -55,26 +56,11 @@ namespace QuickLook
private void Application_Startup(object sender, StartupEventArgs e) 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."); _cleanExit = false;
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);
Shutdown(); Shutdown();
return; return;
} }
@@ -84,7 +70,35 @@ namespace QuickLook
// first instance: run and preview this file // first instance: run and preview this file
if (e.Args.Any() && (Directory.Exists(e.Args.First()) || File.Exists(e.Args.First()))) 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() private void CheckUpdate()
@@ -96,11 +110,6 @@ namespace QuickLook
SettingHelper.Set("LastUpdateTicks", DateTime.Now.Ticks); SettingHelper.Set("LastUpdateTicks", DateTime.Now.Ticks);
} }
private void RemoteCallShowPreview(StartupEventArgs e)
{
PipeServerManager.SendMessage(PipeMessages.Toggle, e.Args.First());
}
private void RunListener(StartupEventArgs e) private void RunListener(StartupEventArgs e)
{ {
TrayIconManager.GetInstance(); TrayIconManager.GetInstance();
@@ -119,7 +128,7 @@ namespace QuickLook
private void App_OnExit(object sender, ExitEventArgs e) private void App_OnExit(object sender, ExitEventArgs e)
{ {
if (!_isFirstInstance) if (!_cleanExit)
return; return;
_isRunning.ReleaseMutex(); _isRunning.ReleaseMutex();
@@ -130,9 +139,24 @@ namespace QuickLook
ViewWindowManager.GetInstance().Dispose(); 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;
} }
} }
} }

View File

@@ -153,6 +153,7 @@
<APP_START>QuickLook is running in the background.</APP_START> <APP_START>QuickLook is running in the background.</APP_START>
<APP_SECOND>QuickLook is already running</APP_SECOND> <APP_SECOND>QuickLook is already running</APP_SECOND>
<APP_SECOND_TEXT>QuickLook enables quick previewing of certain type of files by pressing the spacebar while it is highlighted.</APP_SECOND_TEXT> <APP_SECOND_TEXT>QuickLook enables quick previewing of certain type of files by pressing the spacebar while it is highlighted.</APP_SECOND_TEXT>
<APP_PATH_NOT_WRITABLE>Data path "{0}" is not writable. Please check if you have sufficient premission.</APP_PATH_NOT_WRITABLE>
<MW_BrowseFolder>Browse {0}</MW_BrowseFolder> <MW_BrowseFolder>Browse {0}</MW_BrowseFolder>
<MW_Open>Open {0}</MW_Open> <MW_Open>Open {0}</MW_Open>
<MW_OpenWith>Open with {0}</MW_OpenWith> <MW_OpenWith>Open with {0}</MW_OpenWith>
@@ -489,6 +490,7 @@
<APP_START>QuickLook 正在后台运行。</APP_START> <APP_START>QuickLook 正在后台运行。</APP_START>
<APP_SECOND>另一个 QuickLook 进程正在运行</APP_SECOND> <APP_SECOND>另一个 QuickLook 进程正在运行</APP_SECOND>
<APP_SECOND_TEXT>在您选中文件并按下空格键时QuickLook 将提供多种格式的快速预览。</APP_SECOND_TEXT> <APP_SECOND_TEXT>在您选中文件并按下空格键时QuickLook 将提供多种格式的快速预览。</APP_SECOND_TEXT>
<APP_PATH_NOT_WRITABLE>数据目录 "{0}" 不可写。请检查您是否有足够的权限。</APP_PATH_NOT_WRITABLE>
<MW_BrowseFolder>浏览 {0}</MW_BrowseFolder> <MW_BrowseFolder>浏览 {0}</MW_BrowseFolder>
<MW_Open>打开 {0}</MW_Open> <MW_Open>打开 {0}</MW_Open>
<MW_OpenWith>用 {0} 打开</MW_OpenWith> <MW_OpenWith>用 {0} 打开</MW_OpenWith>
@@ -514,6 +516,7 @@
<APP_START>QuickLook 正在背景執行</APP_START> <APP_START>QuickLook 正在背景執行</APP_START>
<APP_SECOND>另一個 QuickLook 處理程序正在執行。</APP_SECOND> <APP_SECOND>另一個 QuickLook 處理程序正在執行。</APP_SECOND>
<APP_SECOND_TEXT>在資料夾中選取任意檔案並按下空白鍵QuickLook 即可提供多種檔案格式的快速預覽。</APP_SECOND_TEXT> <APP_SECOND_TEXT>在資料夾中選取任意檔案並按下空白鍵QuickLook 即可提供多種檔案格式的快速預覽。</APP_SECOND_TEXT>
<APP_PATH_NOT_WRITABLE>數據目錄 "{0}" 不可寫。請檢查您是否有足夠的權限。</APP_PATH_NOT_WRITABLE>
<MW_BrowseFolder>瀏覽 {0}</MW_BrowseFolder> <MW_BrowseFolder>瀏覽 {0}</MW_BrowseFolder>
<MW_Open>開啟 {0}</MW_Open> <MW_Open>開啟 {0}</MW_Open>
<MW_OpenWith>使用 {0} 開啟</MW_OpenWith> <MW_OpenWith>使用 {0} 開啟</MW_OpenWith>

View File

@@ -2,5 +2,9 @@ $version = git describe --always --tags
Start-Sleep -s 1 Start-Sleep -s 1
Write-Output "This file makes QuickLook portable." >> ..\Build\Package\portable.lock
Remove-Item ..\Build\QuickLook-$version.zip -ErrorAction SilentlyContinue Remove-Item ..\Build\QuickLook-$version.zip -ErrorAction SilentlyContinue
Compress-Archive ..\Build\Package\* ..\Build\QuickLook-$version.zip Compress-Archive ..\Build\Package\* ..\Build\QuickLook-$version.zip
Remove-Item ..\Build\Package\portable.lock