]> wimlib.net Git - wimlib/blobdiff - programs/imagex.c
imagex_update(): Acquire capture privileges on Windows
[wimlib] / programs / imagex.c
index 854be037e42ac281dd25eba5685f017bee191d69..601ad01ca53374a06c63007c5174b4fee5b4f26b 100644 (file)
@@ -1519,7 +1519,7 @@ imagex_apply(int argc, tchar **argv)
        num_images = wimlib_get_num_images(w);
        if (argc == 2 && num_images != 1) {
                imagex_error(T("\"%"TS"\" contains %d images; Please select one "
-                              "(or all)"), wimfile, num_images);
+                              "(or all)."), wimfile, num_images);
                usage(APPLY);
                ret = -1;
                goto out;
@@ -1928,7 +1928,7 @@ imagex_dir(int argc, tchar **argv)
                 * choose that one; otherwise, print an error. */
                num_images = wimlib_get_num_images(w);
                if (num_images != 1) {
-                       imagex_error(T("The file \"%"TS"\" contains %d images; Please "
+                       imagex_error(T("\"%"TS"\" contains %d images; Please "
                                       "select one."), wimfile, num_images);
                        usage(DIR);
                        ret = -1;
@@ -2699,7 +2699,7 @@ imagex_mount_rw_or_ro(int argc, tchar **argv)
                image = 1;
                num_images = wimlib_get_num_images(w);
                if (num_images != 1) {
-                       imagex_error(T("The file \"%"TS"\" contains %d images; Please "
+                       imagex_error(T("\"%"TS"\" contains %d images; Please "
                                       "select one."), wimfile, num_images);
                        usage((mount_flags & WIMLIB_MOUNT_FLAG_READWRITE)
                                        ? MOUNTRW : MOUNT);
@@ -2934,6 +2934,7 @@ imagex_update(int argc, tchar **argv)
        size_t cmd_file_nchars;
        struct wimlib_update_command *cmds;
        size_t num_cmds;
+       int num_images;
 
        const tchar *config_file = NULL;
        tchar *config_str;
@@ -3017,6 +3018,15 @@ imagex_update(int argc, tchar **argv)
        if (ret)
                goto out_wimlib_free;
 
+       num_images = wimlib_get_num_images(wim);
+       if (argc == 1 && num_images != 1) {
+               imagex_error(T("\"%"TS"\" contains %d images; Please select one."),
+                            wimfile, num_images);
+               usage(UPDATE);
+               ret = -1;
+               goto out_wimlib_free;
+       }
+
        /* Parse capture configuration file if specified */
        if (config_file) {
                size_t config_len;
@@ -3069,15 +3079,23 @@ imagex_update(int argc, tchar **argv)
                }
        }
 
+#ifdef __WIN32__
+       win32_acquire_capture_privileges();
+#endif
+
        /* Execute the update commands */
        ret = wimlib_update_image(wim, image, cmds, num_cmds, update_flags,
                                  imagex_progress_func);
        if (ret)
-               goto out_free_cmds;
+               goto out_release_privs;
 
        /* Overwrite the updated WIM */
        ret = wimlib_overwrite(wim, write_flags, num_threads,
                               imagex_progress_func);
+out_release_privs:
+#ifdef __WIN32__
+       win32_release_capture_privileges();
+#endif
 out_free_cmds:
        free(cmds);
 out_free_cmd_file_contents: