2016-12-05 120 views
0

我试图用VS2010创建一个安装程序,它调用一个在安装程序完成安装后复制一些文件的实用程序。使用CustomAction创建VS2010安装程序

我所做的是创建一个实用程序,它接受目标(安装程序安装程序包的位置)和源(安装程序文件的位置)的命令行参数。

接下来,在安装程序项目中,我在安装程序后添加了一个CustomAction,以使用参数[TARGETDIR] [SourceDir]调用我的实用程序(作为安装的一部分安装)。

我的问题是如果安装程序位于网络驱动器上,[SourceDir]不会填充任何内容!如果它位于我的任何硬盘上,CD上或闪存驱动器上的文件夹中,则会填充正确的路径。如果它位于网络驱动器(未映射到驱动器号)上,则[SourceDir]就是传递给该实用程序是空白的!

有关如何获取网络位置的任何想法作为[SourceDir]传递?

Installer's CustomAction settings for Copy utility

Install CustomAction to call Copy utility

回答

0

你可以尝试OriginalDatabase属性,看看是否能解决任何好转。

但是,除非您使用安装后的程序进行复制,否则您不太可能取得成功。

在Everyone安装(对于所有用户)中,Visual Studio自定义操作使用系统帐户运行。您说您没有映射到驱动器号(因为它们属于交互式用户而不是系统帐户,驱动器号将无法使用),但系统帐户没有网络权限,因此尝试解析网络位置失败,而且你的代码无论如何都无法完成复制。这就是为什么在交互式用户帐户中运行单独程序的原因,在用户首次运行该应用程序时执行复制。或者应用程序设计是这样的,应用程序知道额外文件的网络位置并且可以直接访问它。我不知道您的情况下有任何其他解决方案。

+0

Thanks Phil ...我已经或多或少地发现了同样的东西:(我用另一个替换了我的复制实用程序,让我导航到文件的来源,并且当OpenFile对话框打开时,没有任何网络位置正如你所说的那样,我现在正在处理一个运行安装程序的Cmd文件,安装程序使用正确的路径生成一个cmd文件,并且在安装程序结束后,第一个cmd文件运行第二个..我还没有完成调试,但它看起来很有希望。 – Steve76063