[appstore] don't exit on unhandled parameters

* Looks like executables installed from the Windows Store launch with a "/InvokerPRAID"
  added parameter, which of course BREAKS apps that have a defined set of parameters
  and don't except that Microsoft would gingerly add random unwanted stuff there...
* This results in our argument processing loop to cause early exit on account that an
  unexpected option was provided.
* Fix this by adding an explicit check for /InvokerPRAID and not exiting on unhandled
  params.
* Also set an explicit Windows.FullTrustApplication and remove splash screen.
* Also update _pre-commit.sh to update appstore build number automatically.
This commit is contained in:
Pete Batard 2021-02-05 10:54:10 +00:00
parent 0d604fbcf1
commit 986234230f
No known key found for this signature in database
GPG Key ID: 38E0CF5E69EDD671
6 changed files with 44 additions and 42 deletions

View File

@ -38,7 +38,9 @@ _EOF
sed -i -e "s/@@BUILD@@/$BUILD/g" cmd.sed
# Run sed to update the nano version
sed -b -i -f cmd.sed src/rufus.rc
sed -b -i -f cmd.sed res/appstore/Package.appxmanifest
# NB: we need to run git add else the modified files may be ignored
git add src/rufus.rc
git add res/appstore/Package.appxmanifest
rm cmd.sed

View File

@ -10,7 +10,7 @@
<Identity
Name="19453.net.Rufus"
Publisher="CN=7AC86D13-3E5A-491A-ADD5-80095C212740"
Version="3.13.1732.0" />
Version="3.13.1733.0" />
<Properties>
<DisplayName>Rufus</DisplayName>
@ -19,7 +19,6 @@
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.19042.572" />
</Dependencies>
@ -30,7 +29,7 @@
<Applications>
<Application Id="Rufus"
Executable="rufus\rufus.exe"
EntryPoint="$targetentrypoint$">
EntryPoint="Windows.FullTrustApplication">
<uap:VisualElements
DisplayName="Rufus"
Description="Rufus"
@ -38,7 +37,6 @@
Square150x150Logo="Images\Square150x150Logo.png"
Square44x44Logo="Images\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" Square71x71Logo="Images\SmallTile.png" Square310x310Logo="Images\LargeTile.png"/>
<uap:SplashScreen Image="Images\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>

View File

@ -38,7 +38,7 @@
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Configuration">
<PreBuildEvent>echo "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool" sign /v /sha1 9ce9a71ccab3b38a74781b975f1c228222cf7d3b /fd SHA256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp rufus.exe</PreBuildEvent>
<PreBuildEvent>"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\signtool" sign /v /sha1 9ce9a71ccab3b38a74781b975f1c228222cf7d3b /fd SHA256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp rufus.exe</PreBuildEvent>
</PropertyGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>

View File

@ -215,29 +215,13 @@ Global
{B01F5886-2B39-4B66-B65C-6427135B6A02}.Release|x86.ActiveCfg = Release|Win32
{B01F5886-2B39-4B66-B65C-6427135B6A02}.Release|x86.Build.0 = Release|Win32
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|arm.ActiveCfg = Debug|ARM
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|arm.Build.0 = Debug|ARM
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|arm.Deploy.0 = Debug|ARM
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|arm64.ActiveCfg = Debug|ARM64
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|arm64.Build.0 = Debug|ARM64
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|arm64.Deploy.0 = Debug|ARM64
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|x64.ActiveCfg = Debug|x64
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|x64.Build.0 = Debug|x64
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|x64.Deploy.0 = Debug|x64
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|x86.ActiveCfg = Debug|x86
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|x86.Build.0 = Debug|x86
{9440518F-38FE-43D9-9151-A26618E8C978}.Debug|x86.Deploy.0 = Debug|x86
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|arm.ActiveCfg = Release|ARM
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|arm.Build.0 = Release|ARM
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|arm.Deploy.0 = Release|ARM
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|arm64.ActiveCfg = Release|ARM64
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|arm64.Build.0 = Release|ARM64
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|arm64.Deploy.0 = Release|ARM64
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|x64.ActiveCfg = Release|x64
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|x64.Build.0 = Release|x64
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|x64.Deploy.0 = Release|x64
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|x86.ActiveCfg = Release|x86
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|x86.Build.0 = Release|x86
{9440518F-38FE-43D9-9151-A26618E8C978}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@ -120,7 +120,7 @@ BOOL advanced_mode_device, advanced_mode_format, allow_dual_uefi_bios, detect_fa
BOOL use_fake_units, preserve_timestamps = FALSE, fast_zeroing = FALSE, app_changed_size = FALSE;
BOOL zero_drive = FALSE, list_non_usb_removable_drives = FALSE, enable_file_indexing, large_drive = FALSE;
BOOL write_as_image = FALSE, write_as_esp = FALSE, installed_uefi_ntfs = FALSE, use_vds = FALSE, ignore_boot_marker = FALSE;
BOOL windows_to_go_selected = FALSE;
BOOL windows_to_go_selected = FALSE, appstore_version = FALSE;
float fScale = 1.0f;
int dialog_showing = 0, selection_default = BT_IMAGE, persistence_unit_selection = -1;
int default_fs, fs_type, boot_type, partition_type, target_type; // file system, boot type, partition type, target type
@ -3087,7 +3087,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
int wait_for_mutex = 0;
FILE* fd;
BOOL attached_console = FALSE, external_loc_file = FALSE, lgp_set = FALSE, automount = TRUE;
BOOL disable_hogger = FALSE, previous_enable_HDDs = FALSE; // , vc = IsRegistryNode(REGKEY_HKCU, vs_reg);
BOOL disable_hogger = FALSE, previous_enable_HDDs = FALSE, vc = IsRegistryNode(REGKEY_HKCU, vs_reg);
BOOL alt_pressed = FALSE, alt_command = FALSE;
BYTE *loc_data;
DWORD loc_size, u, size = sizeof(u);
@ -3101,6 +3101,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
HDC hDC;
MSG msg;
struct option long_options[] = {
{"appstore", no_argument, NULL, 'a'},
{"extra-devs", no_argument, NULL, 'x'},
{"gui", no_argument, NULL, 'g'},
{"help", no_argument, NULL, 'h'},
@ -3145,13 +3146,14 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
// We have to process the arguments before we acquire the lock and process the locale
PF_INIT(__wgetmainargs, Msvcrt);
if (pf__wgetmainargs != NULL) {
BOOL list_params = TRUE; // TODO: Remove this once we've seen more from AppStore
pf__wgetmainargs(&argc, &wargv, &wenv, 1, &si);
argv = (char**)calloc(argc, sizeof(char*));
if (argv != NULL) {
// Non getopt parameter check
for (i = 0; i < argc; i++) {
argv[i] = wchar_to_utf8(wargv[i]);
// Check for " /W" (wait for mutex release for pre 1.3.3 versions)
// Check for "/W" (wait for mutex release for pre 1.3.3 versions)
if (strcmp(argv[i], "/W") == 0)
wait_for_mutex = 150; // Try to acquire the mutex for 15 seconds
// We need to find if we need to disable the hogger BEFORE we start
@ -3159,6 +3161,14 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
// on the commandline then, which the hogger makes more intuitive.
if ((strcmp(argv[i], "-g") == 0) || (strcmp(argv[i], "--gui") == 0))
disable_hogger = TRUE;
// Check for "/InvokerPRAID", which is *STUPIDLY* added by Microsoft
// when starting an app that was installed from the Windows store...
if ((stricmp(argv[i], "/InvokerPRAID") == 0) || (strcmp(argv[i], "-a") == 0) ||
(strcmp(argv[i], "--appstore") == 0)) {
uprintf("AppStore version detected");
appstore_version = TRUE;
goto skip_args_processing;
}
}
// If our application name contains a 'p' (for "portable") create a 'rufus.ini'
// NB: argv[0] is populated in the previous loop
@ -3173,6 +3183,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
if (!disable_hogger) {
// Reattach the console, if we were started from commandline
if (AttachConsole(ATTACH_PARENT_PROCESS) != 0) {
uprintf("Enabling console line hogger");
attached_console = TRUE;
IGNORE_RETVAL(freopen("CONIN$", "r", stdin));
IGNORE_RETVAL(freopen("CONOUT$", "w", stdout));
@ -3182,11 +3193,12 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
}
}
while ((opt = getopt_long(argc, argv, "?xghf:i:w:l:", long_options, &option_index)) != EOF) {
while ((opt = getopt_long(argc, argv, "xghf:i:w:l:", long_options, &option_index)) != EOF) {
switch (opt) {
case 'x':
enable_HDDs = TRUE;
break;
case 'a':
case 'g':
// No need to reprocess that option
break;
@ -3227,19 +3239,26 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
case 'w':
wait_for_mutex = atoi(optarg);
break;
case '?':
case 'h':
default:
uprintf("Rufus usage selected");
PrintUsage(argv[0]);
goto out;
// getopt_long returns '?' for any option it doesn't recognize
default:
list_params = TRUE;
break;
}
}
if (list_params) {
uprintf("Command line arguments:");
for (i = 1; i < argc; i++)
uprintf(argv[i]);
}
}
} else {
uprintf("Could not access UTF-16 args");
}
uprintf("Post args processing");
skip_args_processing:
// Retrieve various app & system directories
if (GetCurrentDirectoryU(sizeof(app_dir), app_dir) == 0) {
uprintf("Could not get current directory: %s", WindowsErrorString());
@ -3253,7 +3272,6 @@ uprintf("Post args processing");
uprintf("Could not get temp directory: %s", WindowsErrorString());
static_strcpy(temp_dir, ".\\");
}
uprintf("Post dirs processing");
// Construct Sysnative ourselves as there is no GetSysnativeDirectory() call
// By default (64bit app running on 64 bit OS or 32 bit app running on 32 bit OS)
// Sysnative and System32 are the same
@ -3272,7 +3290,7 @@ uprintf("Post dirs processing");
// Look for a .ini file in the current app directory
static_sprintf(ini_path, "%s\\rufus.ini", app_dir);
fd = fopenU(ini_path, ini_flags); // Will create the file if portable mode is requested
// vc |= (safe_strcmp(GetSignatureName(NULL, NULL), cert_name[0]) == 0);
vc |= (safe_strcmp(GetSignatureName(NULL, NULL), cert_name[0]) == 0);
if (fd != NULL) {
ini_file = ini_path;
fclose(fd);
@ -3431,12 +3449,12 @@ relaunch:
if (get_loc_data_file(loc_file, selected_locale))
WriteSettingStr(SETTING_LOCALE, selected_locale->txt[0]);
//if (!vc) {
// if (MessageBoxExU(NULL, lmprintf(MSG_296), lmprintf(MSG_295),
// MB_YESNO | MB_ICONWARNING | MB_IS_RTL | MB_SYSTEMMODAL, selected_langid) != IDYES)
// goto out;
// vc = TRUE;
//}
if (!vc) {
if (MessageBoxExU(NULL, lmprintf(MSG_296), lmprintf(MSG_295),
MB_YESNO | MB_ICONWARNING | MB_IS_RTL | MB_SYSTEMMODAL, selected_langid) != IDYES)
goto out;
vc = TRUE;
}
/*
* Create the main Window

View File

@ -33,7 +33,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDD_DIALOG DIALOGEX 12, 12, 232, 326
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_ACCEPTFILES
CAPTION "Rufus 3.14.1732"
CAPTION "Rufus 3.14.1733"
FONT 9, "Segoe UI Symbol", 400, 0, 0x0
BEGIN
LTEXT "Drive Properties",IDS_DRIVE_PROPERTIES_TXT,8,6,53,12,NOT WS_GROUP
@ -395,8 +395,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,14,1732,0
PRODUCTVERSION 3,14,1732,0
FILEVERSION 3,14,1733,0
PRODUCTVERSION 3,14,1733,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -414,13 +414,13 @@ BEGIN
VALUE "Comments", "https://rufus.ie"
VALUE "CompanyName", "Akeo Consulting"
VALUE "FileDescription", "Rufus"
VALUE "FileVersion", "3.14.1732"
VALUE "FileVersion", "3.14.1733"
VALUE "InternalName", "Rufus"
VALUE "LegalCopyright", "© 2011-2021 Pete Batard (GPL v3)"
VALUE "LegalTrademarks", "https://www.gnu.org/licenses/gpl-3.0.html"
VALUE "OriginalFilename", "rufus-3.13.exe"
VALUE "ProductName", "Rufus"
VALUE "ProductVersion", "3.14.1732"
VALUE "ProductVersion", "3.14.1733"
END
END
BLOCK "VarFileInfo"