refactor(initialization): 移除pip安装步骤
This commit is contained in:
@@ -97,7 +97,7 @@ async function startAutoProcess() {
|
|||||||
if (aborted.value) return
|
if (aborted.value) return
|
||||||
|
|
||||||
if (hasUpdate) {
|
if (hasUpdate) {
|
||||||
progressText.value = '正在更新...'
|
progressText.value = '发现更新,正在更新代码...'
|
||||||
progress.value = 40
|
progress.value = 40
|
||||||
|
|
||||||
// 使用配置中保存的Git镜像源
|
// 使用配置中保存的Git镜像源
|
||||||
|
|||||||
121
frontend/src/components/initialization/GitStep.vue
Normal file
121
frontend/src/components/initialization/GitStep.vue
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<template>
|
||||||
|
<div class="step-panel">
|
||||||
|
<h3>Git 版本控制工具</h3>
|
||||||
|
<div v-if="!gitInstalled" class="install-section">
|
||||||
|
<p>需要安装 Git 工具来获取源代码</p>
|
||||||
|
<div class="git-info">
|
||||||
|
<a-alert
|
||||||
|
message="Git 工具信息"
|
||||||
|
description="将安装便携版 Git 工具,包含完整的版本控制功能,无需系统安装。"
|
||||||
|
type="info"
|
||||||
|
show-icon
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="already-installed">
|
||||||
|
<a-result status="success" title="Git已成功安装,无需继续安装" />
|
||||||
|
<!-- <div class="reinstall-section">-->
|
||||||
|
<!-- <a-button type="primary" danger @click="handleForceReinstall" :loading="reinstalling">-->
|
||||||
|
<!-- {{ reinstalling ? '正在重新安装...' : '强制重新安装' }}-->
|
||||||
|
<!-- </a-button>-->
|
||||||
|
<!-- <p class="reinstall-note">点击此按钮将删除现有Git环境并重新安装</p>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
defineProps<{
|
||||||
|
gitInstalled: boolean
|
||||||
|
}>()
|
||||||
|
|
||||||
|
const reinstalling = ref(false)
|
||||||
|
|
||||||
|
// 强制重新安装Git
|
||||||
|
async function handleForceReinstall() {
|
||||||
|
reinstalling.value = true
|
||||||
|
try {
|
||||||
|
console.log('开始强制重新安装Git')
|
||||||
|
// 先删除现有Git
|
||||||
|
const deleteResult = await window.electronAPI.deleteGit()
|
||||||
|
if (!deleteResult.success) {
|
||||||
|
throw new Error(`删除Git失败: ${deleteResult.error}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新安装Git
|
||||||
|
const installResult = await window.electronAPI.downloadGit()
|
||||||
|
if (!installResult.success) {
|
||||||
|
throw new Error(`重新安装Git失败: ${installResult.error}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Git强制重新安装成功')
|
||||||
|
// 通知父组件更新状态
|
||||||
|
window.location.reload() // 简单的页面刷新来更新状态
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Git强制重新安装失败:', error)
|
||||||
|
// 这里可以添加错误提示
|
||||||
|
} finally {
|
||||||
|
reinstalling.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
handleForceReinstall,
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.step-panel {
|
||||||
|
padding: 20px;
|
||||||
|
background: var(--ant-color-bg-elevated);
|
||||||
|
border-radius: 8px;
|
||||||
|
border: 1px solid var(--ant-color-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.step-panel h3 {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: var(--ant-color-text);
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.install-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.install-section p {
|
||||||
|
color: var(--ant-color-text-secondary);
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.git-info {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.already-installed {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 200px;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reinstall-section {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.reinstall-note {
|
||||||
|
font-size: 12px;
|
||||||
|
color: var(--ant-color-text-tertiary);
|
||||||
|
text-align: center;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -4,19 +4,19 @@
|
|||||||
<h1>AUTO_MAA 初始化向导</h1>
|
<h1>AUTO_MAA 初始化向导</h1>
|
||||||
<p>欢迎使用 AUTO_MAA,让我们来配置您的运行环境</p>
|
<p>欢迎使用 AUTO_MAA,让我们来配置您的运行环境</p>
|
||||||
|
|
||||||
<!-- <div class="header-actions">-->
|
<div class="header-actions">
|
||||||
<!-- <a-button size="large" type="primary" @click="handleSkipToHome">-->
|
<a-button size="large" type="primary" @click="handleSkipToHome">
|
||||||
<!-- 跳转至首页(仅开发用)-->
|
跳转至首页(仅开发用)
|
||||||
<!-- </a-button>-->
|
</a-button>
|
||||||
<!-- <a-button-->
|
<a-button
|
||||||
<!-- size="large"-->
|
size="large"
|
||||||
<!-- type="default"-->
|
type="default"
|
||||||
<!-- @click="handleJumpToStep(6)"-->
|
@click="handleJumpToStep(5)"
|
||||||
<!-- style="margin-left: 16px"-->
|
style="margin-left: 16px"
|
||||||
<!-- >-->
|
>
|
||||||
<!-- 跳到启动服务(第七步)-->
|
跳到启动服务(第六步)
|
||||||
<!-- </a-button>-->
|
</a-button>
|
||||||
<!-- </div>-->
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<a-steps :current="currentStep" :status="stepStatus" class="init-steps">
|
<a-steps :current="currentStep" :status="stepStatus" class="init-steps">
|
||||||
@@ -49,17 +49,17 @@
|
|||||||
ref="pythonStepRef"
|
ref="pythonStepRef"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 步骤 2: pip 安装 -->
|
<!-- 步骤 2: Git 工具 -->
|
||||||
<PipStep v-if="currentStep === 2" :pip-installed="pipInstalled" ref="pipStepRef" />
|
<GitStep v-if="currentStep === 2" :git-installed="gitInstalled" ref="gitStepRef" />
|
||||||
|
|
||||||
<!-- 步骤 3: 源码获取 -->
|
<!-- 步骤 3: 源码获取 -->
|
||||||
<BackendStep v-if="currentStep === 4" :backend-exists="backendExists" ref="backendStepRef" />
|
<BackendStep v-if="currentStep === 3" :backend-exists="backendExists" ref="backendStepRef" />
|
||||||
|
|
||||||
<!-- 步骤 4: 依赖安装 -->
|
<!-- 步骤 4: 依赖安装 -->
|
||||||
<DependenciesStep v-if="currentStep === 5" ref="dependenciesStepRef" />
|
<DependenciesStep v-if="currentStep === 4" ref="dependenciesStepRef" />
|
||||||
|
|
||||||
<!-- 步骤 5: 启动服务 -->
|
<!-- 步骤 5: 启动服务 -->
|
||||||
<ServiceStep v-if="currentStep === 6" ref="serviceStepRef" />
|
<ServiceStep v-if="currentStep === 5" ref="serviceStepRef" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="step-actions">
|
<div class="step-actions">
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
{{ getNextButtonText() }}
|
{{ getNextButtonText() }}
|
||||||
</a-button>
|
</a-button>
|
||||||
|
|
||||||
<!-- 第7步重新启动服务按钮 -->
|
<!-- 第6步重新启动服务按钮 -->
|
||||||
<a-button
|
<a-button
|
||||||
v-if="currentStep === 5"
|
v-if="currentStep === 5"
|
||||||
type="default"
|
type="default"
|
||||||
@@ -107,13 +107,14 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, watch } from 'vue'
|
import { ref, computed, watch } from 'vue'
|
||||||
import { message } from 'ant-design-vue'
|
import { message } from 'ant-design-vue'
|
||||||
import { createComponentLogger } from '@/utils/logger'
|
import { createComponentLogger } from '@/utils/logger'
|
||||||
import { saveConfig } from '@/utils/config'
|
import { saveConfig } from '@/utils/config'
|
||||||
import ThemeStep from './ThemeStep.vue'
|
import ThemeStep from './ThemeStep.vue'
|
||||||
import PythonStep from './PythonStep.vue'
|
import PythonStep from './PythonStep.vue'
|
||||||
import PipStep from './PipStep.vue'
|
|
||||||
|
import GitStep from './GitStep.vue'
|
||||||
import BackendStep from './BackendStep.vue'
|
import BackendStep from './BackendStep.vue'
|
||||||
import DependenciesStep from './DependenciesStep.vue'
|
import DependenciesStep from './DependenciesStep.vue'
|
||||||
import ServiceStep from './ServiceStep.vue'
|
import ServiceStep from './ServiceStep.vue'
|
||||||
@@ -124,7 +125,6 @@ const logger = createComponentLogger('ManualMode')
|
|||||||
interface Props {
|
interface Props {
|
||||||
// 状态
|
// 状态
|
||||||
pythonInstalled: boolean
|
pythonInstalled: boolean
|
||||||
pipInstalled: boolean
|
|
||||||
gitInstalled: boolean
|
gitInstalled: boolean
|
||||||
backendExists: boolean
|
backendExists: boolean
|
||||||
dependenciesInstalled: boolean
|
dependenciesInstalled: boolean
|
||||||
@@ -152,7 +152,6 @@ const progressText = ref('')
|
|||||||
// 组件引用
|
// 组件引用
|
||||||
const themeStepRef = ref()
|
const themeStepRef = ref()
|
||||||
const pythonStepRef = ref()
|
const pythonStepRef = ref()
|
||||||
const pipStepRef = ref()
|
|
||||||
const gitStepRef = ref()
|
const gitStepRef = ref()
|
||||||
const backendStepRef = ref()
|
const backendStepRef = ref()
|
||||||
const dependenciesStepRef = ref()
|
const dependenciesStepRef = ref()
|
||||||
@@ -195,10 +194,10 @@ async function handleNextStep() {
|
|||||||
await installPython()
|
await installPython()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case 2: // pip 安装
|
case 2: // Git 工具
|
||||||
console.log('执行pip安装')
|
console.log('执行Git工具安装')
|
||||||
if (!props.pipInstalled) {
|
if (!props.gitInstalled) {
|
||||||
await installPip()
|
await installGit()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case 3: // 源码获取
|
case 3: // 源码获取
|
||||||
@@ -242,7 +241,7 @@ function getNextButtonText() {
|
|||||||
case 1:
|
case 1:
|
||||||
return props.pythonInstalled ? '下一步' : '安装 Python'
|
return props.pythonInstalled ? '下一步' : '安装 Python'
|
||||||
case 2:
|
case 2:
|
||||||
return props.pipInstalled ? '下一步' : '安装 pip'
|
return props.gitInstalled ? '下一步' : '安装 Git'
|
||||||
case 3:
|
case 3:
|
||||||
return props.backendExists ? '更新代码' : '获取代码'
|
return props.backendExists ? '更新代码' : '获取代码'
|
||||||
case 4:
|
case 4:
|
||||||
@@ -265,20 +264,20 @@ async function autoStartSpeedTest() {
|
|||||||
await pythonStepRef.value.testPythonMirrorSpeed()
|
await pythonStepRef.value.testPythonMirrorSpeed()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case 4: // 源码获取
|
case 3: // 源码获取
|
||||||
if (backendStepRef.value?.testGitMirrorSpeed) {
|
if (backendStepRef.value?.testGitMirrorSpeed) {
|
||||||
console.log('自动开始Git镜像测速')
|
console.log('自动开始Git镜像测速')
|
||||||
await backendStepRef.value.testGitMirrorSpeed()
|
await backendStepRef.value.testGitMirrorSpeed()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case 5: // 依赖安装
|
case 4: // 依赖安装
|
||||||
if (!props.dependenciesInstalled && dependenciesStepRef.value?.testPipMirrorSpeed) {
|
if (!props.dependenciesInstalled && dependenciesStepRef.value?.testPipMirrorSpeed) {
|
||||||
console.log('自动开始pip镜像测速')
|
console.log('自动开始pip镜像测速')
|
||||||
await dependenciesStepRef.value.testPipMirrorSpeed()
|
await dependenciesStepRef.value.testPipMirrorSpeed()
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
case 6: // 启动服务 - 自动启动后端
|
case 5: // 启动服务 - 自动启动后端
|
||||||
console.log('进入第七步,自动启动后端服务')
|
console.log('进入第六步,自动启动后端服务')
|
||||||
await autoStartBackendService()
|
await autoStartBackendService()
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -299,17 +298,7 @@ async function installPython() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function installPip() {
|
|
||||||
logger.info('开始安装pip')
|
|
||||||
const result = await window.electronAPI.installPip()
|
|
||||||
if (result.success) {
|
|
||||||
logger.info('pip安装成功')
|
|
||||||
await saveConfig({ pipInstalled: true })
|
|
||||||
} else {
|
|
||||||
logger.error('pip安装失败', result.error)
|
|
||||||
throw new Error(result.error)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function installGit() {
|
async function installGit() {
|
||||||
logger.info('开始安装Git工具')
|
logger.info('开始安装Git工具')
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ export interface FrontendConfig {
|
|||||||
gitInstalled?: boolean
|
gitInstalled?: boolean
|
||||||
backendExists?: boolean
|
backendExists?: boolean
|
||||||
dependenciesInstalled?: boolean
|
dependenciesInstalled?: boolean
|
||||||
pipInstalled?: boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_CONFIG: FrontendConfig = {
|
const DEFAULT_CONFIG: FrontendConfig = {
|
||||||
@@ -38,7 +37,6 @@ const DEFAULT_CONFIG: FrontendConfig = {
|
|||||||
gitInstalled: false,
|
gitInstalled: false,
|
||||||
backendExists: false,
|
backendExists: false,
|
||||||
dependenciesInstalled: false,
|
dependenciesInstalled: false,
|
||||||
pipInstalled: false,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 读取配置(内部使用,不触发保存)
|
// 读取配置(内部使用,不触发保存)
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
v-else
|
v-else
|
||||||
ref="manualModeRef"
|
ref="manualModeRef"
|
||||||
:python-installed="pythonInstalled"
|
:python-installed="pythonInstalled"
|
||||||
:pip-installed="pipInstalled"
|
|
||||||
:git-installed="gitInstalled"
|
:git-installed="gitInstalled"
|
||||||
:backend-exists="backendExists"
|
:backend-exists="backendExists"
|
||||||
:dependencies-installed="dependenciesInstalled"
|
:dependencies-installed="dependenciesInstalled"
|
||||||
@@ -46,7 +45,6 @@ const autoMode = ref(false)
|
|||||||
|
|
||||||
// 安装状态
|
// 安装状态
|
||||||
const pythonInstalled = ref(false)
|
const pythonInstalled = ref(false)
|
||||||
const pipInstalled = ref(false)
|
|
||||||
const gitInstalled = ref(false)
|
const gitInstalled = ref(false)
|
||||||
const backendExists = ref(false)
|
const backendExists = ref(false)
|
||||||
const dependenciesInstalled = ref(false)
|
const dependenciesInstalled = ref(false)
|
||||||
@@ -89,7 +87,6 @@ async function checkCriticalFiles() {
|
|||||||
const config = await getConfig()
|
const config = await getConfig()
|
||||||
return {
|
return {
|
||||||
pythonExists: config.pythonInstalled || false,
|
pythonExists: config.pythonInstalled || false,
|
||||||
pipExists: config.pipInstalled || false,
|
|
||||||
gitExists: config.gitInstalled || false,
|
gitExists: config.gitInstalled || false,
|
||||||
mainPyExists: config.backendExists || false,
|
mainPyExists: config.backendExists || false,
|
||||||
}
|
}
|
||||||
@@ -101,13 +98,11 @@ async function checkCriticalFiles() {
|
|||||||
console.log('🔍 electronAPI.checkCriticalFiles() 原始返回结果:', criticalFiles)
|
console.log('🔍 electronAPI.checkCriticalFiles() 原始返回结果:', criticalFiles)
|
||||||
console.log('🔍 详细检查结果:')
|
console.log('🔍 详细检查结果:')
|
||||||
console.log(' - pythonExists:', criticalFiles.pythonExists, typeof criticalFiles.pythonExists)
|
console.log(' - pythonExists:', criticalFiles.pythonExists, typeof criticalFiles.pythonExists)
|
||||||
console.log(' - pipExists:', criticalFiles.pipExists, typeof criticalFiles.pipExists)
|
|
||||||
console.log(' - gitExists:', criticalFiles.gitExists, typeof criticalFiles.gitExists)
|
console.log(' - gitExists:', criticalFiles.gitExists, typeof criticalFiles.gitExists)
|
||||||
console.log(' - mainPyExists:', criticalFiles.mainPyExists, typeof criticalFiles.mainPyExists)
|
console.log(' - mainPyExists:', criticalFiles.mainPyExists, typeof criticalFiles.mainPyExists)
|
||||||
|
|
||||||
const result = {
|
const result = {
|
||||||
pythonExists: criticalFiles.pythonExists,
|
pythonExists: criticalFiles.pythonExists,
|
||||||
pipExists: criticalFiles.pipExists,
|
|
||||||
gitExists: criticalFiles.gitExists,
|
gitExists: criticalFiles.gitExists,
|
||||||
mainPyExists: criticalFiles.mainPyExists,
|
mainPyExists: criticalFiles.mainPyExists,
|
||||||
}
|
}
|
||||||
@@ -123,13 +118,11 @@ async function checkCriticalFiles() {
|
|||||||
const config = await getConfig()
|
const config = await getConfig()
|
||||||
console.log('📄 使用配置文件中的状态:', {
|
console.log('📄 使用配置文件中的状态:', {
|
||||||
pythonInstalled: config.pythonInstalled,
|
pythonInstalled: config.pythonInstalled,
|
||||||
pipInstalled: config.pipInstalled,
|
|
||||||
gitInstalled: config.gitInstalled,
|
gitInstalled: config.gitInstalled,
|
||||||
backendExists: config.backendExists,
|
backendExists: config.backendExists,
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
pythonExists: config.pythonInstalled || false,
|
pythonExists: config.pythonInstalled || false,
|
||||||
pipExists: config.pipInstalled || false,
|
|
||||||
gitExists: config.gitInstalled || false,
|
gitExists: config.gitInstalled || false,
|
||||||
mainPyExists: config.backendExists || false,
|
mainPyExists: config.backendExists || false,
|
||||||
}
|
}
|
||||||
@@ -137,7 +130,6 @@ async function checkCriticalFiles() {
|
|||||||
console.error('❌ 读取配置文件也失败了:', configError)
|
console.error('❌ 读取配置文件也失败了:', configError)
|
||||||
return {
|
return {
|
||||||
pythonExists: false,
|
pythonExists: false,
|
||||||
pipExists: false,
|
|
||||||
gitExists: false,
|
gitExists: false,
|
||||||
mainPyExists: false,
|
mainPyExists: false,
|
||||||
}
|
}
|
||||||
@@ -157,7 +149,6 @@ async function checkEnvironment() {
|
|||||||
|
|
||||||
// 直接根据exe文件存在性设置状态
|
// 直接根据exe文件存在性设置状态
|
||||||
pythonInstalled.value = criticalFiles.pythonExists
|
pythonInstalled.value = criticalFiles.pythonExists
|
||||||
pipInstalled.value = criticalFiles.pipExists
|
|
||||||
gitInstalled.value = criticalFiles.gitExists
|
gitInstalled.value = criticalFiles.gitExists
|
||||||
backendExists.value = criticalFiles.mainPyExists
|
backendExists.value = criticalFiles.mainPyExists
|
||||||
|
|
||||||
@@ -167,7 +158,6 @@ async function checkEnvironment() {
|
|||||||
|
|
||||||
console.log('📊 最终状态设置:')
|
console.log('📊 最终状态设置:')
|
||||||
console.log(' - pythonInstalled:', pythonInstalled.value)
|
console.log(' - pythonInstalled:', pythonInstalled.value)
|
||||||
console.log(' - pipInstalled:', pipInstalled.value)
|
|
||||||
console.log(' - gitInstalled:', gitInstalled.value)
|
console.log(' - gitInstalled:', gitInstalled.value)
|
||||||
console.log(' - backendExists:', backendExists.value)
|
console.log(' - backendExists:', backendExists.value)
|
||||||
console.log(' - dependenciesInstalled:', dependenciesInstalled.value)
|
console.log(' - dependenciesInstalled:', dependenciesInstalled.value)
|
||||||
@@ -179,13 +169,11 @@ async function checkEnvironment() {
|
|||||||
// 检查所有关键exe文件是否都存在
|
// 检查所有关键exe文件是否都存在
|
||||||
const allExeFilesExist =
|
const allExeFilesExist =
|
||||||
criticalFiles.pythonExists &&
|
criticalFiles.pythonExists &&
|
||||||
criticalFiles.pipExists &&
|
|
||||||
criticalFiles.gitExists &&
|
criticalFiles.gitExists &&
|
||||||
criticalFiles.mainPyExists
|
criticalFiles.mainPyExists
|
||||||
|
|
||||||
console.log('关键exe文件状态检查:')
|
console.log('关键exe文件状态检查:')
|
||||||
console.log('- python.exe存在:', criticalFiles.pythonExists)
|
console.log('- python.exe存在:', criticalFiles.pythonExists)
|
||||||
console.log('- pip.exe存在:', criticalFiles.pipExists)
|
|
||||||
console.log('- git.exe存在:', criticalFiles.gitExists)
|
console.log('- git.exe存在:', criticalFiles.gitExists)
|
||||||
console.log('- main.py存在:', criticalFiles.mainPyExists)
|
console.log('- main.py存在:', criticalFiles.mainPyExists)
|
||||||
console.log('- 所有关键文件存在:', allExeFilesExist)
|
console.log('- 所有关键文件存在:', allExeFilesExist)
|
||||||
|
|||||||
Reference in New Issue
Block a user