Я рыл вокруг Google, пытающегося найти соответствующий способ определить путь установки, выбранный пользователем из мастера установки.
В основном я сталкиваюсь с проблемой, где мой сервис не может создать файлы в своем собственном каталоге, потому что он испытывает недостаток в верных полномочиях. Я принимаю корректный способ разрешить, что это должно удостовериться, что независимо от того, что отчет, который использует сервис, сделан соответствующие полномочия файла на, он - папка.
Но прежде чем я могу даже заняться, как установить полномочия через.Net I, должен знать папку установки. Я использую проект установки, который имеет класс Установщика, который содержит a ServiceInstaller
управление также. Оба имеют Context
свойство, таким образом, я проверял, что для параметров, которые доступны, когда событие AfterInstall стреляет для каждого из соответствующих установщиков. Я думал сначала, что я буду видеть TargetDir
набор свойств, но это не имело место. Я однако вижу AssemblyPath
набор и указывающий на исполняемый файл соответствующей папки.
По существу я просто хочу удостовериться, что это - соответствующий метод, который я должен использовать:
private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);;
}
Ваше настраиваемое действие - это отложенное настраиваемое действие, и ему доступны только определенные свойства. Дополнительные сведения см. На следующей странице, http: // msdn.microsoft.com/en-us/library/aa370543(VS.85).aspx . Вы можете добавить свойство TARGETDIR в CustomActionData в Visual Studio 2008; однако я не работал с Visual Studio 2008 в качестве инструмента для разработки.
Выполнение сложной установки в Visual Studio 2008 очень сложно, потому что она абстрагируется от ряда ключевых функций MSI. Я настоятельно рекомендую взглянуть на WiX.
Даже если вы не используете WiX, вы захотите загрузить Orca, http://msdn.microsoft.com/en-us/library/aa370557 (VS.85) .aspx и используйте его для проверки вашей установки. Это сэкономит вам бесчисленное количество часов спустя.
Ах - если вы говорите о «сквозной» прозрачности, нет, CSS не делает этого.
За исключением WebKit (двигатель предоставления в Сафари и Chrome), у которого есть полностью таможенное, сделанный Дэйвом Хьяттом, даже не в стоимости недвижимости CSS 3, - фоновый клип WebKit: текст;
.
Его не поддерживает ни один другой браузер, кроме Safari и Chrome.
-121--3565923-Здесь происходит несколько вещей - убедитесь, что они разделены, например,
Пожалуйста, обратите внимание!! Есть множество исключений, которые вы можете получить при сохранении файла, посмотреть документы и обработать их как-то...
// Get list box contents
var sb = new StringBuilder();
foreach (var item in lstBox.Items)
{
// i am using the .ToString here, you may do more
sb.AppendLine(item);
}
string data = sb.ToString();
// Append Info
data = data + ????....
// Write File
void Save(string data)
{
using(SaveFileDialog saveFileDialog = new SaveFileDialog())
{
// optional
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
//saveFileDialog.Filter = ???;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
File.WriteAllText(saveFileDialog.Filename);
MessageBox.Show("ok", "all good etc");
}
else
{
// not good......
}
}
}
-121--4903764- В качестве альтернативы установочным проектам можно использовать некоторые службы установки. Я думаю, что с помощью http://installer.codeeffects.com вы можете загрузить любые файлы с вашего сайта и поместить их в каталог установки, когда пользователь установит ваш сервис. Надеюсь, это поможет.
Насколько я могу судить, это единственный способ определить каталог для установки. Конечно, я приму к сведению, если кто-то придет с другим ответом, но до тех пор я придерживаюсь этого подхода.
Чтобы получить значение свойства целевого каталога в настраиваемом действии, вы можете перенаправить его вручную, выбрав вывод настраиваемого действия в представлении настраиваемого действия и указав что-то вроде:
/TargetDir="[TARGETDIR]"
в качестве значения для свойства CustomActionData.
После этого вы сможете получить к нему доступ:
string targetDir = Context.Parameters[ "TargetDir" ];