65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import { exec } from 'child_process';
|
|
|
|
export function reboot(): Promise<{ succeed: boolean; message?: string }> {
|
|
if (process.platform === 'win32') {
|
|
return rebootWindows();
|
|
} else if (process.platform === 'linux') {
|
|
return rebootLinux();
|
|
}
|
|
|
|
return Promise.resolve({
|
|
succeed: false,
|
|
message: 'Platform not supported',
|
|
});
|
|
}
|
|
|
|
function rebootWindows(): Promise<{ succeed: boolean; message?: string }> {
|
|
return new Promise<{ succeed: boolean; message?: string }>(
|
|
(resolve, reject) => {
|
|
exec('shutdown /r /t 3', (error, stdout, stderr) => {
|
|
if (error) {
|
|
console.error(
|
|
`Error shutting down Windows: ${error.message}`
|
|
);
|
|
return resolve({ succeed: false, message: error.message });
|
|
}
|
|
if (stderr) {
|
|
console.error(`Error shutting down Windows: ${stderr}`);
|
|
return resolve({ succeed: false, message: stderr });
|
|
}
|
|
console.log(`Windows shutdown command executed: ${stdout}`);
|
|
resolve({ succeed: true });
|
|
});
|
|
}
|
|
);
|
|
}
|
|
|
|
async function rebootLinux(): Promise<{ succeed: boolean; message?: string }> {
|
|
try {
|
|
const request = await fetch('http://127.0.0.1:6302/rebootNow');
|
|
const response = await request.json();
|
|
|
|
return response;
|
|
} catch (error) {
|
|
return { succeed: false, message: (error as Error).message };
|
|
}
|
|
// return new Promise<{ succeed: boolean; message?: string }>(
|
|
// (resolve, reject) => {
|
|
// exec('shutdown -r now', (error, stdout, stderr) => {
|
|
// if (error) {
|
|
// console.error(
|
|
// `Error shutting down Linux: ${error.message}`
|
|
// );
|
|
// return resolve({ succeed: false, message: error.message });
|
|
// }
|
|
// if (stderr) {
|
|
// console.error(`Error shutting down Linux: ${stderr}`);
|
|
// return resolve({ succeed: false, message: stderr });
|
|
// }
|
|
// console.log(`Linux shutdown command executed: ${stdout}`);
|
|
// resolve({ succeed: true });
|
|
// });
|
|
// }
|
|
// );
|
|
}
|