Я запускаю программу c, предназначенную для автоматизации процесса, который «переупаковывает» установку Windows. Я делаю это по двум причинам. Первая причина — это изучение программирования на C, а вторая причина в том, что я запускаю Windows с MacBook Pro, у которого нет супердрайва. Я нашел учебник, в котором объясняется, как установить Windows на vbox, а затем скопировать его на другой жесткий диск. Я решил, что хочу попрактиковаться в программировании на 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);
}
system()
происходит в совершенно новой оболочке. Таким образом, вызовsystem()
, который просто меняет каталоги, не будет особенно полезен (поскольку он не повлияет на последующие вызовы). - person FatalError   schedule 31.05.2012