我正在运行旨在自动化“重新打包”Windows 安装的进程的 ac 程序。我这样做有两个原因。第一个原因是学习 c 编程,第二个原因是我在没有超级驱动器的 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);
}