Lym*_*les 31 deployment installation desktop projects-and-solutions visual-studio-2008
同胞类人猿和睡莲叶和明轮!
我正在使用VS 2008在C#/ .NET/WPF中开发Windows桌面应用程序.该应用程序需要在Vista和XP计算机上安装和运行.我正在使用安装程序/ Windows Installer项目来安装该应用程序.
我的应用程序需要读取/修改/写入SQLCE数据库文件(.sdf)以及与我正在使用的第三方控件相关的其他数据库类型文件.这些文件应该在PC上的所有用户/登录之间共享,其中任何一个都不需要是管理员.当然,这意味着文件不能进入程序自己的安装目录(因为在Vista到来之前通常会这样做,是的,是的!).
我原本以为解决方案很简单.Vista和XP都有用于此目的的共享应用程序数据文件夹.(Vista中的"\ ProgramData",XP中的"\ Documents and Settings\All Users\Application Data".).NET Environment.GetFolderPath(SpecialFolder.CommonApplicationData)调用用于查找给定PC上这些文件夹的路径,是,是的!
但我无法弄清楚如何在安装项目中将shared-application-data文件夹指定为目标.
Setup项目提供了一个"Common Files"文件夹,但是它用于共享程序组件(而不是数据文件),通常位于"\ Program Files"下,并且具有与"\ Program files"中的任何其他内容相同的安全限制,是的是的!
安装项目提供了"用户的应用程序数据"文件夹,但这是一个每用户文件夹,这正是我想要避免的,是的,是的!
是否可以从VS 2008安装项目以强大的跨Windows版本方式将文件添加到shared-app-data文件夹?谁能告诉我怎么样?
Lym*_*les 20
我通过其他来源了解了我的问题的答案,是的,是的!可悲的是,它没有解决我的问题!是什么让我 - 一个固定鞋面?是的是的!
要将东西放在VS2008安装项目的Common Application Data文件夹的子目录中,以下是您的操作:
在Solution Explorer中右键单击您的安装项目,然后选择"View - > File System".
右键单击"目标计算机上的文件系统",然后选择"添加特殊文件夹 - >自定义文件夹".
将自定义文件夹重命名为"Common Application Data Folder".(这不是将用于生成的文件夹的名称,它只是为了帮助您保持正确.)
将文件夹的DefaultLocation属性更改为"[CommonAppDataFolder] [制造商]\[产品名称]".请注意与Application Folder的DefaultLocation属性的相似性,包括奇怪使用单个反斜杠.
对于一个名为"Property"的文件夹属性这个荒谬(但无可否认)的事实惊叹不已.
将文件夹的Property属性更改为"COMMONAPPDATAFOLDER".
放置在"Common Application Data"文件夹中的数据文件将被复制到"\ ProgramData\Manufacturer\ProductName"(在Vista上)或"\ Documents and Settings\All Users\Application Data\Manufacturer\ProductName"(在XP上)安装程序运行.
现在事实证明,在Vista下,非管理员不会在这里获得对文件的修改/写入权限.所以所有用户都可以阅读文件,但他们也可以在"\ Program Files"中获得.那么,我想知道,Common Application Data文件夹的重点是什么?
ejw*_*ipp 10
不是选中"启用ClickOnce安全设置"并选择"这是一个完全信任的应用程序",而是可以使用安装项目的"安装"部分下的自定义操作更改应用程序的CommonAppDataDirectory的权限.这是我做的:
static void Main(string[] args)
{
if (args != null && args.Length > 0 && args[0] == "Install")
{
ApplicationData.SetPermissions();
}
else
{
// Execute app "normally"
}
}
public static void SetPermissions()
{
String path = GetPath();
try
{
// Create security idenifier for all users (WorldSid)
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
DirectoryInfo di = new DirectoryInfo(path);
DirectorySecurity ds = di.GetAccessControl();
// add a new file access rule w/ write/modify for all users to the directory security object
ds.AddAccessRule(new FileSystemAccessRule(sid,
FileSystemRights.Write | FileSystemRights.Modify,
InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, // all sub-dirs to inherit
PropagationFlags.None,
AccessControlType.Allow)); // Turn write and modify on
// Apply the directory security to the directory
di.SetAccessControl(ds);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
由于安装程序以管理员权限运行,因此程序将能够更改权限.我在某处读到"启用ClickOnce安全性"可能会导致用户在应用启动时看到不需要的提示.如上所述这样做可以防止这种情况发生.我希望这可以帮助别人.我知道几天前我能从这样的事情中受益匪浅!
小智 6
我这样解决了.我将数据库文件(.sdf)保存在与安装应用程序的位置相同的文件夹中(应用程序文件夹).在主项目的属性窗口的安全选项卡上,我选中了"启用ClickOnce安全设置"并选择"这是一个完全信任的应用程序",重建并运行设置.之后没有安全问题
我正在使用Visual Studio 2008和Windows Vista