c - 为什么访问 C :\Windows\System32\. 的 Windows 命令 .. 在 C 程序中不起作用?

标签 c windows cmd system32 bcdedit

我正在运行一个 c 程序,该程序旨在自动执行“重新打包”Windows 安装的过程。我这样做有两个原因。第一个原因是学习 c 编程,第二个原因是我在没有 super 驱动器的 MacBook pro 上运行 Windows。我找到了一个教程,解释了如何在 vbox 上安装 Windows,然后将其复制到另一个硬盘驱动器。我决定我想练习 c 编程并自动化本教程,所以我编写了下面的代码。当我运行下面的程序时,我得到的错误是 bcdedit 不是内部或外部命令,并且 unnattend.xml 是复制的,但是当我检查它是否存在时,却找不到它。经过一些试验后,我发现如果我直接从提升的命令提示符运行它,我在 System() 函数中使用的代码运行得非常好。尽管当我从提升的命令提示符运行我的程序时,它给了我前面提到的错误。似乎一个exe无法访问System32文件夹??请帮忙!我在这里用头撞墙

    #include <stdio.h>

    void part1 (void);
    void part2 (void);

    void part1 (void)
    {
        FILE *fp;
        //Run Switcheroo
        if ((fp=fopen("log.txt", "r")) == NULL)
        {
            //Run part 1.
            system("DISKPART /s resources\\diskpart\\DskPrtAssgn.txt");
            system("TIMEOUT /T 3");
            system("reg unload HKLM\\BCD00000000");
            system("TIMEOUT /T 3");
            system("robocopy s:\\ c:\\ bootmgr");
            system("TIMEOUT /T 3");
            system("robocopy s:\\Boot c:\\Boot /s");
            system("TIMEOUT /T 3");
            system("bcdedit /store c:\\boot\\bcd /set {bootmgr} device partition=C:");
            system("TIMEOUT /T 3");
            system("DISKPART /s resources\\diskpart\\DskPrtActv.txt");
            system("TIMEOUT /T 3");
            system("schtasks /create /tn 'Switcheroo' /tr %userprofile%\\Desktop\\Switcheroo\\Switcheroo.exe /sc onlogon");

            //Set up the log file that the computer will check upon reboot.
            char buffer[2] = {'0'};
            fp = fopen("log.txt", "wb");
            fwrite (buffer , 1 , sizeof(buffer) , fp );

            //Reboot.
            system("shutdown -r");
        }
        else if (fp = fopen("log.txt", "rt"))
        {
            part2();
        }
    }

    void part2 (void)
    {
        FILE *fp;

        //Read the log file from part1. 
        if (fp = fopen("log.txt", "rt"))
        {
            //Run part 2.
            system("DISKPART /s resources\\diskpart\\DskPrtRmv.txt");
            system("TIMEOUT /T 3");
            system("cd resources\\sysprep");
            system("copy unattend.xml C:\Windows\System32\Sysprep");
            system("TIMEOUT /T 3");     
            system("runas /user:%username% %userprofile%\\Desktop\\Switcheroo\\resources\\sysprep\\ sysprep.bat");
        }

        //If part one did not finish then print error.
        else if ((fp=fopen("log.txt", "r")) == NULL)
        {
            printf("Error.");
        }
    }

    int main ()
    {
        part1();
        return(0);
    }

最佳答案

您不应该用 C 语言编写系统管理脚本。以批处理、python 或 PowerShell 的方式进行。 C 绝对不是您正在编写的程序的正确选择。

关于c - 为什么访问 C :\Windows\System32\. 的 Windows 命令 .. 在 C 程序中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839193/

相关文章:

c - 对 C 内存池中的内存块进行碎片整理

windows - 如何在 Windows 上同时搜索多个 Powerpoint 和 PDF 文件中的文本?

windows - 修复 vbs 以启动隐藏系统文件检查器

android - 是否可以在 Android 中运行批处理文件?

c++ - Windows C++ CMD窗口切换

c - 测量程序执行时间的方法

c - GTK/C 在函数之间共享数据和变量

c# - 从 C# 执行多个命令提示符命令

c - 对未初始化变量有任何保证吗?

windows - CommandLineToArgvW 怪癖