В каких условиях локальные файлы замечены или записаны приложением Приложения-V?

Для некоторых приложений я упорядочил, Приложение-V, кажется, делает, что необходимо, чтобы подать заявку работать правильно. В других случаях, однако, я нашел, что виртуализируются несколько файлов, которые должны находиться в локальной файловой системе. Это - проблема, потому что те файлы не переживают "восстановление" виртуализированного приложения.

Я думал, что установка папки VFS для слияния режима позволит приложению писать в локальную файловую систему. Однако простой тест показал, что это, кажется, не имеет место. Очевидно, должны быть правила, диктующие, из которого файлы считаны и записаны в локальную файловую систему в противоположность VFS.

В каких условиях локальная файловая система считана из или записана в приложением Приложения-V?

1
задан 10 August 2015 в 23:08
1 ответ

TL; DR

Файлы, существующие в локальной файловой системе , могут быть видны виртуализированному приложению, когда соответствующая папка VFS находится в режиме «слияния» или соответствующая папка не упоминается в VFS. Но те же файлы нельзя увидеть, когда соответствующая папка VFS находится в режиме «переопределения».

Виртуализированное приложение записывает в локальную файловую систему только тогда, когда выполняются оба следующих условия:

  • папка, в которую записан файл, не упоминается в VFS, и
  • папка, в которую записан файл, существует в локальной файловой системе

Мне не удалось найти авторитетную документацию, чтобы ответить на этот вопрос. Ближайшей информацией, которую я нашел, была запись в блоге Калле Саунамяки 2011 года о App-V 4.6 в 2011 году. Оказывается, не только эта публикация выполняется только периферийно, но и поведение App-V 5.x также, похоже, изменилось по крайней мере в одном случае (например, App-V 5.x, похоже, не создает недостающие объединенные- режим папок VFS в локальной файловой системе, тогда как Калле, похоже, был свидетелем этого в 4.6).

Эмпирический тест

Мои грубые эксперименты только привели к путанице в результатах, поэтому я решил провести несколько более формальных тестов, чтобы понять суть проблемы. это.

Настройка

Тест включал создание файлов на каждом из следующих этапов:

  • A: Перед секвенированием
  • B: Во время секвенирования изнутри секвенсора
  • C: Перед публикацией
  • D : После публикации из виртуального процесса внутри приложения

Существует три возможных случая применения VFS к папке в конце последовательности:

  • режим переопределения
  • режим слияния
  • не упоминается

На этапе публикации любая заданная папка может быть создана или нет в каждой из локальной и виртуальной файловых систем. Это четыре варианта.

Три способа применения VFS в сочетании с четырьмя возможностями публикации привели к 12 случаям, которые я тестировал. Я использовал несколько скриптов, чтобы автоматизировать это и (надеюсь) избежать ошибок. Эти сценарии находятся в конце этого сообщения.

Результаты

VFS, как видно из пользовательского интерфейса секвенсора, выглядит следующим образом:

enter image description here

Я проверил наличие каждого из файлов, написанных сценариями как изнутри, так и изнутри. за пределами пузыря опубликованного приложения. Результаты представлены в этой таблице:

enter image description here

Анализ

Судя по таблице, похоже, что выполняются следующие утверждения:

  • Все файлы, созданные запущенным виртуализированным приложением, могут быть просмотрены этим приложением. Это неудивительно, поскольку это абсолютно необходимо для работы приложения.
  • Файлы, которые существуют в локальной файловой системе, не могут быть просмотрены виртуализированным приложением, когда соответствующая папка VFS находится в режиме «переопределения».
  • Файлы, существующие в локальная файловая система может быть видна виртуализированному приложению, когда соответствующая папка VFS находится в режиме «слияния» или соответствующая папка не упоминается в VFS.
  • Единственный случай, когда виртуализированное приложение выполняет запись в локальную файловую систему, когда выполняются оба следующих условия:
    • папка, в которую записан файл, не упоминается в VFS, и
    • папка, в которую записан файл, существует в локальной файловой системе

Скрипты

A-before-sequence.ps1

$splat = @{
Cases       = 4..11
FolderName  = 'ExistsBeforeSequencing'
FileName    = 'ExistsBeforeSequencing'
Mode  = 'Create'
}

.\Alter-Folders.ps1 @splat

B-during-sequence.ps1

$splats = @(
@{
    Cases       = 0..3
    FolderName  = 'CreatedDuringSequencing'
    FileName    = 'CreatedDuringSequencing'
    Mode        = 'Create'
},
@{
    Cases       = 4..7
    FolderName  = 'ExistsBeforeSequencing'
    FileName    = 'CreatedDuringSequencing'
    Mode        = 'Create'
}
)
$splats | 
    % { .\Alter-Folders.ps1 @_ }

C-before-publishing.ps1

$splats = @(
@{
    Cases       = 0..3
    FolderName  = 'CreatedDuringSequencing'
    Mode        = 'Remove'
}
@{
    Cases       = 4..11
    FolderName  = 'ExistsBeforeSequencing'
    Mode        = 'Remove'
}
@{
    Cases       = 1,3
    FolderName  = 'CreatedDuringSequencing'
    FileName    = 'CreatedBeforePublishing'
    Mode        = 'Create'
}
@{
    Cases       = 5,7,9,11
    FolderName  = 'ExistsBeforeSequencing'
    FileName    = 'CreatedBeforePublishing'
    Mode  = 'Create'
}
)

$splats | 
    % { .\Alter-Folders.ps1 @_ }

D-app-running.ps1

$splats = @(
@{
    Cases       = 2,3
    FolderName  = 'CreatedDuringSequencing'
    FileName    = 'CreatedByRunningApp'
    Mode        = 'Create'
}
@{
    Cases       = 6,7,10,11
    FolderName  = 'ExistsBeforeSequencing'
    FileName    = 'CreatedByRunningApp'
    Mode  = 'Create'
}
)

$splats | 
    % { .\Alter-Folders.ps1 @_ }

Alter-Folders.ps1

[CmdletBinding()]
param
(
    [parameter(Mandatory=$true)]
    [int32[]]
    $cases,

    [parameter(Mandatory=$true)]
    [string]
    $FolderName,

    [string]
    $FileName,

    [parameter(Mandatory=$true)]
    [string]
    [ValidateSet('create','remove')]
    $mode
)
$path = $env:ProgramData

if ( 'create' -eq $mode )
{
    $cases | 
        % { 
            New-Item "$path\$FolderName$_"           -ItemType Directory | Out-Null
            New-Item "$path\$FolderName$_\$FolderName$_-1" -ItemType Directory | Out-Null
            $filePath = "$path\$FolderName$_\$FolderName$_-1\$FileName$_-1.txt"
            $filePath | Out-File $filePath
        }
}

if ( 'remove' -eq $mode )
{
    $cases |
        % {
            Remove-Item "$path\$FolderName$_" -Recurse -Force
        }
}
3
ответ дан 3 December 2019 в 18:38