Я использую скрипт InnoSetup для сопоставления сетевого диска на ПК1 с общим каталогом на ПК2.Команда завершается успешно, но сетевой диск не отображается в окне обозревателя или в команде «net use» команды cmd.
ПК1 имеет Windows 10 pro.
ПК2 имеет Windows Server 2016 Standard.
Папка MySharedFolder является общей для всех пользователей с правами чтения и записи.
На обоих компьютерах отключен брандмауэр.
На ПК1 не работает UAC.
Для обеих машин установлены одинаковые имя пользователя и пароль ADMIN.
Я использую объект «WScript.Network» и метод «MapNetworkDrive» для сопоставления диска.См. Документ: https://docs.microsoft.com/en-us/previous-versions/8kst88h6%28v%3dvs.85%29 Я попытался запустить команду из inno setup с учетными данными и без них, и она не работает обоими способами.
Если я запускаю команду вручную из cmd: 'net useP: \ PC1 \ MySharedDir \ P / user: myUserName myPassword '(также без учетных данных) работает нормально, и я вижу подключенный диск в окне проводника.
Как мне подключить сетевой диск из inno setup, чтобы он работал и отображался в моем окне обозревателя?
Сценарий InnoSetup:
#define MyAppName "MyNetworkDriveMappingTest"
#define MyAppVersion "1.5"
#define NEW_LINE '#13#10'
[Setup]
AppId={{975540E2-1D87-43BF-BCBA-0519ED840364}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
CreateAppDir=no
OutputBaseFilename=setup1
Compression=lzma
SolidCompression=yes
[Code]
procedure mapNetworkDriveTest();
var
WshNetWork : Variant;
exitCode : Integer;
driveLetter: String;
pathToMap: String;
userToUse: String;
passwordToUse: String;
cmdParams: String;
begin
WshNetWork:=CreateOleObject('WScript.Network');
driveLetter := 'P';
pathToMap := '\\PC2\MySharedDir\P';
userToUse := 'myUserName';
passwordToUse := 'myPassword';
if (DirExists(driveLetter+':\')) then
begin
WshNetwork.RemoveNetworkDrive(driveLetter+':' , true );
Sleep(1000); // Sleep for 1 second to make sure the command finished properly
end;
// Choose Mapping Drive Method:
// two methods:
// 1. cmd
// 2. 'WScript.Network' object
// Method 1 - CMD
//cmdParams := 'net use '+driveLetter+': '+pathToMap+' /user:'+userToUse+' '+passwordToUse;
//Exec('cmd.exe', '/c '+cmdParams+'', '', SW_SHOW, ewWaitUntilTerminated, exitCode);
// Method 2 - 'WScript.Network' object
exitCode := WshNetwork.MapNetworkDrive(driveLetter+':', pathToMap , false , userToUse , passwordToUse);
if (exitCode <> 0) then
begin
MsgBox('Could not map network drive: '''+driveLetter + ''' to path '+pathToMap+{#NEW_LINE}+'CMD Error Code: '+IntToStr(exitCode)+{#NEW_LINE}+'Aborting mapping process of the drive ', mbError, MB_OK);
Exit;
end else
begin
MsgBox('Mapped network drive: '''+driveLetter + ''' to path '+pathToMap+' successfully', mbConfirmation, MB_OK);
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
tempStr: String;
begin
if (CurStep = ssPostInstall) then
begin
mapNetworkDriveTest();
end;
end;